码迷,mamicode.com
首页 > 编程语言 > 详细

HDU 1166 敌兵布阵 树状数组

时间:2016-04-24 00:52:04      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

hdu:http://acm.hdu.edu.cn/showproblem.php?pid=1166

题意:

单点更新,成段查询。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 typedef long long LL;
 8 
 9 const int maxn = 5e4+10;
10 
11 int sum[maxn];
12 int n;
13 
14 void init() {
15     memset(sum, 0, sizeof(sum));
16 }
17 
18 void add(int p, int v) {
19     while (p < maxn) {
20         sum[p] += v;
21         p += p&-p;
22     }
23 }
24 
25 int get_sum(int p) {
26     int ret = 0;
27     while (p > 0) {
28         ret += sum[p];
29         p -= p&-p;
30     }
31     return ret;
32 }
33 
34 int main() {
35     int T,kase=0;
36     scanf("%d", &T);
37     while (T--) {
38         init();
39         scanf("%d", &n);
40         for (int i = 1; i <= n; i++) {
41             int x;
42             scanf("%d", &x);
43             add(i, x);
44         }
45         printf("Case %d:\n", ++kase);
46         char cmd[11];
47         while (scanf("%s", cmd) == 1&&cmd[0]!=E) {
48             if (cmd[0] == Q) {
49                 int l, r;
50                 scanf("%d%d", &l, &r);
51                 printf("%d\n", get_sum(r) - get_sum(l - 1));
52             }
53             else if (cmd[0] == A) {
54                 int p, v;
55                 scanf("%d%d", &p, &v);
56                 add(p, v);
57             }
58             else if (cmd[0] == S) {
59                 int p, v;
60                 scanf("%d%d", &p, &v);
61                 add(p, -v);
62             }
63         }
64     }
65     return 0;
66 }

 

HDU 1166 敌兵布阵 树状数组

标签:

原文地址:http://www.cnblogs.com/fenice/p/5425989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!