Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32819 liuyile 【S】T3 C++ 编译错误 0 0 MS 0 KB 3095 2024-10-02 12:37:24

Tests(0/0):


#include <bits/stdc++.h> using namespace std; #define int long long int a[200300]; int b[200300]; inline bool chk(int l,int r){ int c0=0,c1=0; for(int i=l;i<=r;i++) if(a[i]<=0)return 0; for(int i=l;i<=r;i+=2)c0+=a[i]-1; for(int i=l+1;i<=r;i+=2)c1+=a[i]-1; if(c0!=c1)return 0; if(l==r)return 1; for(int i=l;i<=r;i++) b[i]=a[i]-1; for(int i=l+1;i<=r;i++){ b[i]-=b[i-1]; if(b[i]<0)return 0; } if(b[r])return 0; return 1; } int n,m; struct node{ int len,s0,s1,mn0,mn1,mn; friend node operator+(const node A,const node B){ node C; if(A.len&1){ C.len=A.len+B.len; C.s0=A.s0+B.s1; C.s1=A.s1+B.s0; C.mn0=min(A.mn0,B.mn1+A.s0-A.s1); C.mn1=min(A.mn1,B.mn0+A.s1-A.s0); } else{ C.len=A.len+B.len; C.s0=A.s0+B.s0; C.s1=A.s1+B.s1; C.mn0=min(A.mn0,B.mn0+A.s0-A.s1); C.mn1=min(A.mn1,B.mn1+A.s1-A.s0); } C.mn=min(A.mn,B.mn); return C; } inline void add(int x){ s1+=(len+1)/2*x; s0+=len/2*x; mn1+=x; C.mn+=k; } inline bool chk(){ return mn0>=0&&mn1>=0&&s0==s1&&mn>=0; } }w[200300<<2]; int tg[200300<<2]; #define lc(x) (x<<1) #define rc(x) (x<<1|1) const int INF=1e18; inline void upd (int x){ w[x]=w[lc(x)]+w[rc(x)]; } inline void pd(int x){ if(!tg[x])return ; w[lc(x)].add(tg[x]); w[rc(x)].add(tg[x]); tg[lc(x)]+=tg[x],tg[rc(x)]+=tg[x]; tg[x]=0; } inline void bd(int x,int l,int r){ if(l==r){ w[x]={1,0,a[l],INF,a[l],a[l]}; return ; } int mid=l+r>>1; bd(lc(x),l,mid); bd(rc(x),mid+1,r); upd(x); } inline void mod(int x,int l,int r,int L,int R,int c){ if(L<=l&&r<=R){ w[x].add(c); tg[x]+=c; return ; } pd(x); int mid=l+r>>1; if(L<=mid)mod(lc(x),l,mid,L,R,c); else mod(rc(x),mid+1,r,L,R,c); upd(x); } inline node g(int x,int l,int r,int L,int R){ if(L<=l&&r<=R)return w[x]; pd(x); int mid=l+r>>1; if(L>mid)return g(rc(x),mid+1,r,L,R); else if(R<=mid)return g(lc(x),l,mid,L,R); else return g(lc(x),l,mid,L,R)+g(rc(x),mid+1,r,L,R); } signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); // freopen("apple.in","r",stdin); // freopen("apple.out","w",stdout); cin>>n; for(int i=1;i<=n;i++) cin>>a[i],a[i]--; bd(1,1,n); cin>>m; int ct=0; while(m--){ int op; int l,r; cin>>op>>l>>r; if(op==1){ int x; cin>>x; mod(1,1,n,l,r,x); } else{ node T=g(1,1,n,l,r); // cout<<T.len<<" "<<T.s0<<" "<<T.s1<<" "<<T.mn0<<" "<<T.mx0<<" "<<T.mn1<<" "<<T.mx1<<endl; if(T.chk())cout<<"Yes\n"; else cout<<"No\n"; } } cout.flush(); return 0; }


测评信息: