该代码TLE,实在不清why
#include<cstdio> #define lson n<<1,l,mid #define rson n<<1|1,mid+1,r #define Push a[n].sum=a[n<<1].sum+a[n<<1|1].sum; using namespace std; const int MAX_N=50005; struct node{ int l,r,sum; }; node a[MAX_N<<2]; void Build(int n,int l,int r) { a[n].l=l; a[n].r=r; if(l==r) { scanf("%d",&a[n].sum); return ; } int mid=(l+r)>>1; Build(lson); Build(rson); Push; } void Update(int n,int pos,int val) { if(a[n].l==pos&&a[n].r==pos) { a[n].sum+=val; return ; } int mid=(a[n].l+a[n].r)>>1; if(pos<=mid) Update(n<<1,pos,val); else Update(n<<1|1,pos,val); Push; } int Qsum(int n,int l,int r) { if(a[n].l==a[n].r) { return a[n].sum; } int mid=(a[n].l+a[n].r)>>1; if(r<=mid) return Qsum(n<<1,l,r); else if(mid<l) return Qsum(n<<1|1,l,r); else return Qsum(lson)+Qsum(rson); } int main() { int T; scanf("%d",&T); for(int cas=1;cas<=T;cas++) { printf("Case %d:\n",cas); int n; scanf("%d",&n); Build(1,1,n); char s[20]; while(true) { scanf("%s",s); if(s[0]==‘E‘) break; int x,y; scanf("%d %d",&x,&y); if(s[0]==‘A‘) Update(1,x,y); else if(s[0]==‘S‘) Update(1,x,-y); else printf("%d\n",Qsum(1,x,y)); } } return 0; }
时间: 2024-10-05 15:51:43