标签:style blog class code c tar
1 //Accepted 250MS 2480K 2 #include <cstdio> 3 #include <cstring> 4 const int MAXN = 50005; 5 struct node 6 { 7 int l,r; 8 int add,sum; 9 }f[3*MAXN]; 10 int n; 11 int a[MAXN]; 12 void build(int t,int l,int r) 13 { 14 f[t].l=l; 15 f[t].r=r; 16 f[t].add=0; 17 if (l==r) 18 { 19 f[t].sum=a[l]; 20 return ; 21 } 22 int mid=(l+r)/2; 23 build(2*t,l,mid); 24 build(2*t+1,mid+1,r); 25 f[t].sum=f[2*t].sum+f[2*t+1].sum; 26 } 27 void add(int t,int l,int r,int c) 28 { 29 if (f[t].l==l && f[t].r==r) 30 { 31 f[t].add+=c; 32 return ; 33 } 34 f[t].sum+=(r-l+1)*c; 35 int mid=(f[t].l+f[t].r)/2; 36 if (r<=mid) add(2*t,l,r,c); 37 else 38 { 39 if (l>mid) add(2*t+1,l,r,c); 40 else 41 { 42 add(2*t,l,mid,c); 43 add(2*t+1,mid+1,r,c); 44 } 45 } 46 } 47 int query(int t,int l,int r) 48 { 49 if (f[t].l==l && f[t].r==r) 50 { 51 return f[t].sum+f[t].add*(f[t].r-f[t].l+1); 52 } 53 int mid=(f[t].l+f[t].r)/2; 54 f[2*t].add+=f[t].add; 55 f[2*t+1].add+=f[t].add; 56 f[t].sum+=f[t].add*(f[t].r-f[t].l+1); 57 f[t].add=0; 58 if (r<=mid) return query(2*t,l,r); 59 else 60 { 61 if (l>mid) return query(2*t+1,l,r); 62 else 63 { 64 return query(2*t,l,mid)+query(2*t+1,mid+1,r); 65 } 66 } 67 } 68 int main() 69 { 70 char s[10]; 71 int T; 72 scanf("%d",&T); 73 for (int t=1;t<=T;t++) 74 { 75 scanf("%d",&n); 76 for (int i=1;i<=n;i++) 77 scanf("%d",&a[i]); 78 printf("Case %d:\n",t); 79 build(1,1,n); 80 while (scanf("%s",s) && s[0]!=‘E‘) 81 { 82 int x,y; 83 scanf("%d%d",&x,&y); 84 if (s[0]==‘Q‘) 85 { 86 printf("%d\n",query(1,x,y)); 87 } 88 else if (s[0]==‘A‘) 89 { 90 add(1,x,x,y); 91 } 92 else if (s[0]==‘S‘) 93 { 94 add(1,x,x,-y); 95 } 96 } 97 } 98 return 0; 99 }
标签:style blog class code c tar
原文地址:http://www.cnblogs.com/djingjing/p/3733066.html