hdu1116敌兵布阵

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166

单点更新,区间求和。

 1 #include<cstdio>
 2 #include<cstring>
 3 const int m=50005;
 4 #define lson  l,m,rt<<1
 5 #define rson m+1,r,rt<<1|1
 6
 7 int sum[m<<2];
 8
 9 inline void pushplus(int rt)
10 {
11     sum[rt]=sum[rt<<1]+sum[rt<<1|1];
12 }
13
14 void build (int l,int r,int rt)
15 {
16     if(l==r)
17     {
18         scanf("%d",&sum[rt]);
19         return;
20     }
21     int m=(l+r)>>1;
22     build(lson);
23     build(rson);
24     pushplus(rt);
25 }
26
27 void update(int p,int add,int l,int r,int rt)
28 {
29     if(l==r) {
30         sum[rt]+=add;
31         return;
32     }
33     int m=(l+r)>>1;
34     if(p<=m) update(p,add,lson);
35     else update(p,add,rson);
36     pushplus(rt);
37 }
38
39 int query(int L,int R,int l,int r,int rt)
40 {
41     if(L<=l&&r<=R)
42     {
43         return sum[rt];
44     }
45     int ans=0;
46     int m=(l+r)>>1;
47     if(L<=m) ans+=query(L,R,lson);
48     if(R>m) ans+=query(L,R,rson);
49    return ans;
50 }
51
52 int main()
53 {
54     int t,n,a,b;
55     scanf("%d",&t);
56     for(int i=1;i<=t;i++)
57     {
58         printf("Case %d:\n",i);
59         scanf("%d",&n);
60         build(1,n,1);
61         char s[8];
62         while(scanf("%s",s)&&s[0]!=‘E‘)
63         {
64             scanf("%d%d",&a,&b);
65             if(s[0]==‘Q‘) printf("%d\n",query(a,b,1,n,1));
66             else if(s[0]==‘S‘) update(a,-b,1,n,1);
67             else update(a,b,1,n,1);
68         }
69     }
70     return 0;
71 }
时间: 2024-12-16 04:04:55

hdu1116敌兵布阵的相关文章

hdu 1166:敌兵布阵(树状数组,练习题)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 37773    Accepted Submission(s): 15923 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就

HDU1166 敌兵布阵(树状数组)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 60510    Accepted Submission(s): 25649 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务

hdu 1166 敌兵布阵(单点更新线段树)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 54411    Accepted Submission(s): 22830 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务

hdu 1166(敌兵布阵) 解题报告

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 46897    Accepted Submission(s): 19876 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务

敌兵布阵(杭电1166)(树状数组)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 46588    Accepted Submission(s): 19769 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务

HDU1166_敌兵布阵(线段树/单点更新)

解题报告 题意: 略 思路: 线段树单点增减和区间求和. #include <iostream> #include <cstring> #include <cstdio> #define LL long long using namespace std; int sum[201000]; void update(int root,int l,int r,int p,int v) { int mid=(l+r)/2; if(l==r)sum[root]+=v; else

HDU 1166 敌兵布阵 线段树

敌兵布阵 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视.中央情

hdu敌兵布阵

http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 79309    Accepted Submission(s): 33553 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和

[HDOJ1166]敌兵布阵

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 60627    Accepted Submission(s): 25703 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子D