zrq495
www.zrq495.com

线段树。代码如下:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #define max 50002
 5 
 6 using namespace std;
 7 
 8 typedef struct
 9 {
10     int l, r;
11     int val;
12 }node;
13 
14 node w[4*max];
15 
16 void pushup(int rt)
17 {
18     w[rt].val=w[rt<<1].val+w[rt<<1|1].val;
19 }
20 
21 void build(int l, int r, int rt)
22 {
23     w[rt].l=l;
24     w[rt].r=r;
25     if (l == r)
26     {
27         scanf("%d", &w[rt].val);
28         return ;
29     }
30     int m=(l+r)>>1;
31     build(l, m, rt<<1);
32     build(m+1, r, rt<<1|1);
33     pushup(rt);
34 }
35 
36 void update(int p, int v, int rt)
37 {
38     if (w[rt].l ==  w[rt].r)
39     {
40         w[rt].val+=v;
41         return ;
42     }
43     int m=(w[rt].l+w[rt].r)>>1;
44     if (p <= m) update(p, v, rt<<1);
45     else update(p, v, rt<<1|1);
46     pushup(rt);
47 }
48 
49 int query(int L, int R, int rt)
50 {
51     if (w[rt].l == L && w[rt].r == R)
52         return w[rt].val;
53     int m=(w[rt].l+w[rt].r)>>1;
54     if (L > m)
55     {
56         return query(L, R, rt<<1|1);
57     }
58     else if (R <= m)
59     {
60         return query(L, R, rt<<1);
61     }
62     else
63     {
64         return query(L, m, rt<<1)+query(m+1, R, rt<<1|1);
65     }
66 }
67 
68 int main()
69 {
70     int T, n, i, a, b;
71     char s[10];
72     scanf("%d", &T);
73     for (i=1; i<=T; i++)
74     {
75         printf("Case %d:\n", i);
76         scanf("%d", &n);
77         build(1, n, 1);
78         while(scanf("%s", s), s[0] != 'E')
79         {
80             if (s[0] == 'A')
81             {
82                 scanf("%d%d", &a, &b);
83                 update(a, b, 1);
84             }
85             else if (s[0] == 'S')
86             {
87                 scanf("%d%d", &a, &b);
88                 update(a, -b, 1);
89             }
90             else if (s[0] == 'Q')
91             {
92                 scanf("%d%d", &a, &b);
93                 printf("%d\n", query(a, b, 1));
94             }
95         }
96     }
97     return 0;
98 }
posted on 2012-08-09 21:14  zrq495  阅读(171)  评论(0编辑  收藏  举报