比赛 |
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;
}