比赛 2025.3.6 评测结果 C
题目名称 WHZ 的序列 最终得分 0
用户昵称 Ruyi 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2025-03-06 20:39:56
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,a[200001],q,opt,l,r,d,begin[1001],end[1001],len,num=1,lazy[1001];
long long sum[200001];
int main(){
	freopen("whz_sequence.in","r",stdin);
	freopen("whz_sequence.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(i%2==1) sum[i]=sum[i-1]+a[i];
		else sum[i]=sum[i-1]-a[i];
	}
	len=sqrt(n);
	for(int i=1;i<=len;i++){
		begin[i]=num;
		end[i]=begin[i]+len-1;
		num+=len;
	}
	end[len]=n;
	cin>>q;
	//cout<<"len:"<<len<<endl;
	//for(int i=1;i<=n;i++) cout<<sum[i]<<endl;
	while(q--){
		cin>>opt>>l>>r;
		if(opt==1){
			cin>>d;
			if(r-l<len){
				for(int i=l;i<=r;i++) a[i]+=d;
			}else{
				for(int i=l;i<begin[(l+len-1)/len];i++){
					a[i]+=d;
					for(int j=i;j<=n;j++){
						if(j%2==1) sum[j]+=a[i];
						else sum[j]-=a[i];
					}
				}
				for(int i=(l+len-1)/len;i<=r/len;i++) lazy[i]+=d;
				for(int i=end[r/len]+1;i<=r;i++){
					a[i]+=d;
					for(int j=i;j<=n;j++){
						if(j%2==1) sum[j]+=a[i];
						else sum[j]-=a[i];
					}
				}
			}
		}else{
			int m=0;
			for(int i=(l+len-1)/len;i<=r/len;i++){
				if(i%2==1) m+=lazy[i]/*,cout<<"+lazy:"<<lazy[i]<<endl*/;
				else m-=lazy[i]/*,cout<<"-lazy:"<<lazy[i]<<endl*/;
			}
			if(l%2==1){
				cout<<sum[r]-sum[l-1]+m<<endl;
				//cout<<"S"<<sum[l-1]<<' '<<a[r]<<' '<<m<<endl;
			}else{
				cout<<sum[l-1]-sum[r]-m<<endl;
				//cout<<"S"<<sum[l-1]<<' '<<a[r]<<' '<<m<<endl;
			}
		}
	}
	return 0;
}