HDU1166 敌兵布阵
来源:互联网 发布:java 获取本地路径 编辑:程序博客网 时间:2024/05/19 13:06
题目意思是中文的,相信大家都看得懂不解释。
普通的单点更新线段树,无坑无陷阱。
因为,做的线段树题不多,所以没有自己的代码风格。正在建立自己的风格中。
虽然,以前早就写了N遍这道题了,但是这次要把线段树的大部分题都过一遍,所以这题也写了一下,并且更改了以往的代码风格。
#include <iostream>#include <cstdio>#include <cstring>#define lson l,m,rt << 1#define rson m+1,r,rt<<1|1using namespace std;const int MAXN = 55555;int sum[MAXN<<2];void PushUP(int rt){ sum[rt] = sum[rt<<1] + sum[rt<<1|1];}void build(int l,int r,int rt){ if(l == r){ scanf("%d",&sum[rt]); return; } int m = (l+r) >> 1; build(lson); build(rson); PushUP(rt);}void update(int p,int add,int l,int r,int rt){ if(l == r){ sum[rt] += add; return; } int m = (l+r) >> 1; if(p <= m)update(p,add,lson); else update(p,add,rson); PushUP(rt);}int query(int L,int R,int l,int r,int rt){ if(L <= l&&r <= R){ return sum[rt]; } int m = (l+r) >> 1; int ret = 0; if(L <= m)ret += query(L,R,lson); if(R > m)ret += query(L,R,rson); return ret;}int main(){ int T,n; scanf("%d",&T); for(int kase = 1;kase <= T;++kase){ scanf("%d",&n); build(1,n,1); char op[10]; printf("Case %d:\n",kase); while(scanf("%s",&op),op[0] != 'E'){ int a,b; scanf("%d%d",&a,&b); if(op[0] == 'Q')printf("%d\n",query(a,b,1,n,1)); else if(op[0] == 'S')update(a,-b,1,n,1); else update(a,b,1,n,1); } } return 0;}
1 0
- hdu1166 敌兵布阵
- hdu1166 敌兵布阵
- HDU1166 敌兵布阵
- hdu1166 敌兵布阵
- hdu1166 敌兵布阵
- hdu1166(敌兵布阵)
- HDU1166:敌兵布阵
- hdu1166敌兵布阵
- HDU1166--敌兵布阵
- HDU1166 敌兵布阵
- hdu1166 敌兵布阵
- hdu1166 敌兵布阵
- hdu1166敌兵布阵
- hdu1166敌兵布阵
- hdu1166 敌兵布阵
- HDU1166 敌兵布阵
- hdu1166 敌兵布阵
- hdu1166敌兵布阵
- 定制textField
- win 8.1 下 mongovue 1.6.9 破解说明
- inux c语言连接mysql
- [转]adb常用命令列表
- hduoj4883!【数学】
- HDU1166 敌兵布阵
- 位运算以及用途详解
- Eigen 3.2.2出现了
- 【参考】assert 断言
- UIView扩展,很实用
- 到底什么是VPN和究竟为什么它要
- 最小生成树 ———prim算法 poj 1258
- 如何将自己的私有MIB放在MIB Broswer下浏览
- Value和ValueVector的区别