博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1166 敌兵布阵 线段树区间求和 更改
阅读量:5240 次
发布时间:2019-06-14

本文共 1963 字,大约阅读时间需要 6 分钟。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 using namespace std; 15 #define INF 0x3f3f3f3f 16 #define ll long long 17 #define clc(a,b) memset(a,b,sizeof(a)) 18 const int maxn=50000; 19 20 int ans; 21 struct node 22 { 23 int left,right,sum; 24 int mid() 25 { 26 return (left+right)>>1; 27 } 28 }tree[maxn*4]; 29 30 void build_tree(int l,int r,int o) 31 { 32 tree[o].left=l; 33 tree[o].right=r; 34 if(l==r) 35 { 36 scanf("%d",&tree[o].sum); 37 return ; 38 } 39 int mid=tree[o].mid(); 40 build_tree(l,mid,o<<1); 41 build_tree(mid+1,r,o<<1|1); 42 tree[o].sum=tree[o<<1].sum+tree[o<<1|1].sum; 43 } 44 45 void query(int l,int r,int o,int L,int R) 46 { 47 if(L<=l&&r<=R) 48 { 49 ans+=tree[o].sum; 50 return ; 51 } 52 int mid=tree[o].mid(); 53 if(R<=mid) 54 query(l,mid,o<<1,L,R); 55 else if(L>mid) 56 query(mid+1,r,o<<1|1,L,R); 57 else 58 { 59 query(l,mid,o<<1,L,R); 60 query(mid+1,r,o<<1|1,L,R); 61 } 62 } 63 64 void update(int l,int r,int o,int pos,int add) 65 { 66 if(l==r) 67 { 68 tree[o].sum+=add; 69 return ; 70 } 71 int mid=tree[o].mid(); 72 if(pos<=mid) 73 { 74 update(l,mid,o<<1,pos,add); 75 } 76 else 77 update(mid+1,r,o<<1|1,pos,add); 78 tree[o].sum=tree[o<<1].sum+tree[o<<1|1].sum; 79 } 80 81 int main() 82 { 83 int t,n,cnt; 84 int a,b; 85 char str[10]; 86 cnt=1; 87 scanf("%d",&t); 88 while(t--) 89 { 90 scanf("%d",&n); 91 build_tree(1,n,1); 92 printf("Case %d:\n",cnt++); 93 while(scanf("%s",str)) 94 { 95 if(str[0]=='E') 96 break; 97 scanf("%d%d",&a,&b); 98 if(str[0]=='Q') 99 {100 ans=0;101 query(1,n,1,a,b);102 printf("%d\n",ans);103 }104 else if(str[0]=='A')105 update(1,n,1,a,b);106 else107 update(1,n,1,a,-b);108 }109 }110 return 0;111 }
View Code

 

转载于:https://www.cnblogs.com/ITUPC/p/5202267.html

你可能感兴趣的文章
7.15 文件打开后点击打开下级文件
查看>>
LintCode 112---删除排序链表中的重复元素
查看>>
C++中的内存重叠问题
查看>>
while +next 循环 回到循环顶端
查看>>
修改MySQL事件
查看>>
Java第三方支付接入案例(支付宝)
查看>>
java图片裁剪和java生成缩略图
查看>>
Bzoj1029--Jsoi2007建筑抢修
查看>>
零基础学python-2.18 异常
查看>>
使用 Similar By References 制作“猜你喜欢”列表
查看>>
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)用法
查看>>
线程同步synchronized,Class与Object
查看>>
Linux 服务器带宽异常跑满分析解决
查看>>
maya 操作自我整理(二)
查看>>
架构师最怕程序员知道的10件事
查看>>
vue table-tree 组件
查看>>
3-Longest Substring Without Repeating Characters @LeetCode
查看>>
php curl 域名解析到指定IP -- clwu
查看>>
mediamind 组件
查看>>
SqlHelper发布—比Pagehelper更好用的分页插件
查看>>