HDU 1166 敌兵布阵
来源:互联网 发布:react.js 中文文档 编辑:程序博客网 时间:2024/06/06 04:13
题意:
原意是有n个阵地,每次可以向某个阵地加、减人,还能问你l~r阵地的士兵总人数。
思路:
线段树,单点更新,区间求和。
#include<cstdio>#include<cstring>const int MAX=50005;int sum[MAX<<2];void PushUp(int rt){sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void Build(int l,int r,int rt){sum[rt]=0;if(l==r){scanf("%d",&sum[rt]);return;}int mid=(l+r)>>1;Build(l,mid,rt<<1);Build(mid+1,r,rt<<1|1);PushUp(rt);}void UpDate(int pos,int c,int l,int r,int rt){if(l==r){sum[rt]+=c;return;}int mid=(l+r)>>1;if(pos<=mid) UpDate(pos,c,l,mid,rt<<1);else UpDate(pos,c,mid+1,r,rt<<1|1);PushUp(rt);}int Query(int L,int R,int l,int r,int rt){if(L<=l&&r<=R){return sum[rt];}int res=0;int mid=(l+r)>>1;if(L<=mid) res+=Query(L,R,l,mid,rt<<1);if(mid<R) res+=Query(L,R,mid+1,r,rt<<1|1);return res;}int main(){int T,cas=1;scanf("%d",&T);while(T--){int n;scanf("%d",&n);Build(1,n,1);char op[10];int i,j;printf("Case %d:\n",cas++);while(~scanf("%s",op)&&op[0]!='E'){scanf("%d%d",&i,&j);if(op[0]=='A') UpDate(i,j,1,n,1);if(op[0]=='S') UpDate(i,-j,1,n,1);if(op[0]=='Q') printf("%d\n",Query(i,j,1,n,1));}}return 0;}
0 0
- HDU 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵
- HDU 1166 - 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- testNg之PowerEmailableReporter
- 随机双色球
- cas 登出界面和登出action的修改
- hdu_5723_Abandoned country(最小生成树)
- c#连接到Mysql
- HDU 1166 敌兵布阵
- 类的继承
- React Native发布APP之签名打包APK
- printf应用
- testNg之RetryListener
- js中几种实用的跨域方法原理详解
- UVA 400-Unix Is
- 新手入门正则
- 求高精度幂