Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32914 baka24 【S】T3 C++ 通过 100 448 MS 25952 KB 3288 2024-10-02 14:30:22

Tests(20/20):


#include<bits/stdc++.h> using namespace std; #define int long long #define lson (pos<<1) #define rson (pos<<1|1) int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while('0'<=c&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=200010,inf=1000000000; int n,m,q,a[MAXN],p[MAXN]; struct segtree{ int t[MAXN<<2],lz[MAXN<<2]; void pushup(int pos){ t[pos]=min(t[lson],t[rson]); } void pushdown(int pos){ if(lz[pos]){ t[lson]+=lz[pos]; t[rson]+=lz[pos]; lz[lson]+=lz[pos]; lz[rson]+=lz[pos]; lz[pos]=0; } } void build(int pos,int l,int r){ if(l==r){ t[pos]=p[l]; return; } int mid=(l+r)>>1; build(lson,l,mid);build(rson,mid+1,r); pushup(pos); } void update(int pos,int l,int r,int ql,int qr,int x){ if(ql<=l&&qr>=r){ t[pos]+=x; lz[pos]+=x; return; } pushdown(pos); int mid=(l+r)>>1; if(ql<=mid)update(lson,l,mid,ql,qr,x); if(qr>mid)update(rson,mid+1,r,ql,qr,x); pushup(pos); } int query(int pos,int l,int r,int ql,int qr){ if(ql<=l&&qr>=r)return t[pos]; int mid=(l+r)>>1,res=inf; pushdown(pos); if(ql<=mid)res=query(lson,l,mid,ql,qr); if(qr>mid)res=min(res,query(rson,mid+1,r,ql,qr)); return res; } }TA,TB; struct treearray{ int C[MAXN]; int lb(int x){return x&(-x);} void upd(int x,int y){for(int i=x;i<=n;i+=lb(i))C[i]+=y;} void update(int l,int r,int x){ upd(l,x),upd(r+1,-x); } int qry(int x){int res=0;for(int i=x;i>=1;i-=lb(i))res+=C[i];return res;} int query(int l,int r){ return qry(r)-qry(l-1); } }T,A,B; void slv(){ n=read(); for(int i=1;i<=n;i++){ a[i]=read()-1; T.upd(i,a[i]-a[i-1]); if(i&1)A.upd(i,a[i]-a[i-1]); else B.upd(i,a[i]-a[i-1]); } for(int i=1;i<=n;i++)p[i]=(i&1)?A.qry(i):inf; TA.build(1,1,n); for(int i=1;i<=n;i++)p[i]=(i&1)?inf:B.qry(i); TB.build(1,1,n); q=read(); for(int i=1;i<=q;i++){ int op=read(),l=read(),r=read(),x,y; if(op==1){ x=read(); if(l&1)TA.update(1,1,n,l,n,x); else TB.update(1,1,n,l,n,x); if(r&1)TB.update(1,1,n,r+1,n,-x); else TA.update(1,1,n,r+1,n,-x); T.update(l,r,x); if(l&1)A.upd(l,x); else B.upd(l,x); if(r&1)B.upd(r+1,-x); else A.upd(r+1,-x); } else{ x=A.query(l+1,r),y=B.query(l+1,r); int L=T.qry(l),R=T.qry(r); int LA=TA.query(1,1,n,l,r)-A.qry(l),LB=TB.query(1,1,n,l,r)-B.qry(l); if(l&1)x+=L; else y+=L; if(r&1)y+=-R; else x+=-R; if(r&1)LB=min(LB,-R+B.qry(r)-B.qry(l)); else LA=min(LA,-R+A.qry(r)-A.qry(l)); if(l&1)LA+=L; else LB+=L; printf("%s\n",LA>=0&&LB>=0&&!x&&!y?"Yes":"No"); } } } signed main(){ slv(); return 0; }


测评信息: