比赛 2025.3.6 评测结果 AAAAAAAAAA
题目名称 WHZ 的序列 最终得分 100
用户昵称 flyfree 运行时间 3.185 s
代码语言 C++ 内存使用 29.53 MiB
提交时间 2025-03-06 19:11:25
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pir pair<ll,ll>
#define ls first
#define rs second
#define mp make_pair
#define mod
#define MAXN 200010
#define qmod(x) (x>mod?x-mod:x)
// By flyfreemrn
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
struct node_sgt{
	ll l[MAXN*4],r[MAXN*4],tag[MAXN*4],sum[MAXN*4],cnt[MAXN*4];
	void push_up(ll now){
		sum[now]=sum[now<<1]+sum[now<<1|1];
	}
	void push_down(ll now){
		sum[now<<1]+=cnt[now<<1]*tag[now];
		sum[now<<1|1]+=cnt[now<<1|1]*tag[now];
		tag[now<<1]+=tag[now],tag[now<<1|1]+=tag[now];
		tag[now]=0;
	}
	void build(ll lz,ll rz,ll now,ll type){
		l[now]=lz,r[now]=rz;
		if(lz==rz){
			if((lz&1)==(type&1))cnt[now]=1;
			return;
		}
		ll mid=(lz+rz)>>1;
		build(lz,mid,now<<1,type);
		build(mid+1,rz,now<<1|1,type);
		cnt[now]=cnt[now<<1]+cnt[now<<1|1];
	}
	void modify(ll lz,ll rz,ll now,ll val){
		if(l[now]>=lz&&r[now]<=rz){
			sum[now]+=cnt[now]*val;
			tag[now]+=val;
			return;
		}
		push_down(now);
		ll mid=(l[now]+r[now])>>1;
		if(lz<=mid)modify(lz,rz,now<<1,val);
		if(rz>mid)modify(lz,rz,now<<1|1,val);
		push_up(now);
	}
	ll get(ll lz,ll rz,ll now){
		if(l[now]>=lz&&r[now]<=rz)return sum[now];
		push_down(now);
		ll mid=(l[now]+r[now])>>1,res=0;
		if(lz<=mid)res+=get(lz,rz,now<<1);
		if(rz>mid)res+=get(lz,rz,now<<1|1);
		return res;
	}
}sgt[2];
ll n,q,a[MAXN];
int main(){
	freopen("whz_sequence.in","r",stdin);
	freopen("whz_sequence.out","w",stdout);
	n=read();
	sgt[1].build(1,n,1,1),sgt[0].build(1,n,1,0);
	for(int i=1;i<=n;i++){
		a[i]=read();
		sgt[i&1].modify(i,i,1,a[i]);
	}
	q=read();
	for(int i=1;i<=q;i++){
		ll type=read(),l=read(),r=read();
		if(type==2){
			cout<<sgt[l&1].get(l,r,1)-sgt[(l&1)^1].get(l,r,1)<<endl;
		}else{
			ll p=read();
			sgt[0].modify(l,r,1,p),sgt[1].modify(l,r,1,p);
		}
	}
	return 0;
}