首页 > 其他 > 详细

hdu 1166 敌兵布阵

时间:2014-10-01 22:55:01      阅读:352      评论:0      收藏:0      [点我收藏+]

标准的树状数组模板题,需要注意的是树状数组的初始节点的编号为1。

 1 #define     MAX_N 1000007
 2 #include <cstdlib>
 3 #include  <cstdio>
 4 #include  <iostream>
 5 #include <cstring>
 6 using namespace std;
 7 int bit[MAX_N+1], n;
 8 int lowbit(int x)
 9 {
10     return x&(-x);
11 }
12 int sum(int i)
13 {
14     int s = 0;
15     while( i > 0 )
16     {
17         s += bit[i];
18         i -= lowbit(i);
19     }
20     return s;
21 }
22 void add(int i , int x)
23 {
24     while( i <= n )
25     {
26         bit[i] += x;
27         i += lowbit(i);
28     }
29 }
30 int main(int argc, char *argv[])
31 {
32     int T;
33     int c = 1;
34     scanf ( "%d", &T );
35     while( T-- )
36     {
37         scanf("%d", &n);
38         memset(bit, 0, sizeof(bit));
39         for( int i = 1 ; i <= n ; i++ )
40         {
41             int tmp;
42             scanf ( "%d", &tmp );
43             add(i, tmp);
44         }
45         char s[10];
46         int a, b;
47         printf("Case %d:\n", c++);
48         while(1)
49         {
50             scanf("%s", s);
51             if( !strcmp(s , "End" ))
52             {
53                 break;
54             }
55             else
56             {
57                 scanf("%d%d", &a, &b);
58                 if( !strcmp(s,  "Query") )
59                 {
60                     printf("%d\n", sum(b) - sum(a-1));
61                 }
62                 else if(!strcmp( s ,  "Add") )
63                 {
64                     add(a, b);
65                 }
66                 else if(!strcmp(s, "Sub"))
67                 {
68                     add(a, -b);
69                 }
70             }
71         }
72     }
73 }

 

hdu 1166 敌兵布阵

原文:http://www.cnblogs.com/jostree/p/4003606.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!