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