hdu1166 敌兵布阵 树状数组
来源:互联网 发布:macbook 删除软件 编辑:程序博客网 时间:2024/04/29 07:57
第一行一个整数T,表示有T组数据。
每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。
接下来每行有一条命令,命令有4种形式:
(1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)
(2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);
(3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数;
每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。
接下来每行有一条命令,命令有4种形式:
(1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)
(2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);
(3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数;
(4)End 表示结束,这条命令在每组数据最后出现;
还是查询和更新操作,树状数组~
#include<stdio.h>#include<string.h>#include<math.h>int c[50005];int n;int lowbit(int x){ return x&(-x);}void modify(int i,int j)//修改{ while(i<=n) { c[i]+=j; i=i+lowbit(i); }}long long sum(int i)//求和{ long long s=0; while(i>0) { s+=c[i]; i=i-lowbit(i); } return s;}int main(){ int T,a; scanf("%d",&T); for(int t=1;t<=T;t++) { memset(c,0,sizeof(c)); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a); modify(i,a); } char str[10]; scanf("%s",str); printf("Case %d:\n",t); while(strcmp(str,"End")!=0) { int x,y; scanf("%d%d",&x,&y); if(strcmp(str,"Query")==0) printf("%lld\n",sum(y)-sum(x-1)); else if(strcmp(str,"Add")==0) modify(x,y); else if(strcmp(str,"Sub")==0) modify(x,(-1)*y); scanf("%s",str); } }}
0 0
- hdu1166-敌兵布阵-树状数组
- hdu1166 敌兵布阵 +树状数组
- hdu1166 敌兵布阵 (树状数组)
- hdu1166 敌兵布阵 树状数组
- HDU1166 敌兵布阵 【树状数组】
- hdu1166 敌兵布阵 树状数组
- HDu1166敌兵布阵(树状数组)
- hdu1166 敌兵布阵--树状数组
- HDU1166 敌兵布阵(树状数组)
- HDU1166 敌兵布阵(树状数组)
- hdu1166~敌兵布阵~树状数组求和
- 树状数组hdu1166 敌兵布阵
- HDU1166 敌兵布阵 树状数组水题
- hdu1166敌兵布阵(大意)树状数组
- HDU1166 敌兵布阵(树状数组)
- HDU1166 敌兵布阵(树状数组)
- hdu1166敌兵布阵<树状数组---模板>
- HDU1166 敌兵布阵 树状数组 水题
- linux的du和df命令
- windows下编译ffmpeg
- discuz入门小结
- Java学习笔记(九)Java常用包中的类之Object、Math及数据类型类
- 最短路模板——dijkstra,SPFA(邻接表实现)
- hdu1166 敌兵布阵 树状数组
- ORACLE GROUPING函数的使用
- 随意记的东西
- 链表的常用操作
- ORACLE VARCHAR2(n CHAR)格式
- Drools学习笔记-在eclipse indgo中集成Drools5.5
- ASIHttpRequest缓存
- erlang与java构建的节点通讯
- STL总结