HDU 1166 敌兵布阵
2012-02-14 19:05
302 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1166
开始学线段树,代码基本上是抄的
View Code
开始学线段树,代码基本上是抄的
View Code
//hdu 1166 #include <stdio.h> const int N=50010; int st[4*N],n; void build(int l,int r,int rt) { if (l==r) { scanf("%d",&st[rt]); return; } int m=(l+r)/2; build(l,m,rt*2); build(m+1,r,rt*2+1); st[rt]=st[rt*2]+st[rt*2+1]; } void add(int p,int a,int l,int r,int rt) { if (l==r) { st[rt]+=a; return; } int m=(l+r)/2; if (p<=m) add(p,a,l,m,rt*2); else add(p,a,m+1,r,rt*2+1); st[rt]=st[rt*2]+st[rt*2+1]; } int sum(int ll,int rr,int l,int r,int rt) { if (ll<=l && r<=rr) return st[rt]; int m,s=0; m=(l+r)/2; if (ll<=m) s+=sum(ll,rr,l,m,rt*2); if (rr>m) s+=sum(ll,rr,m+1,r,rt*2+1); return s; } int main() { int T,C=0; scanf("%d",&T); while (T--) { printf("Case %d:\n",++C); scanf("%d",&n); build(1,n,1); char op[6]; int a,b; while (scanf("%s",op),op[0]!='E') { scanf("%d%d",&a,&b); switch (op[0]) { case 'A': add(a,b,1,n,1); break; case 'S': add(a,-b,1,n,1); break; case 'Q': printf("%d\n",sum(a,b,1,n,1)); break; } } } return 0; }
相关文章推荐
- hdu 1166 敌兵布阵 线段树单点更新
- hdu 1166 敌兵布阵
- hdu1166 敌兵布阵 线段树
- HDU 1166 敌兵布阵 线段树
- 【HDU 1166 敌兵布阵】
- hdu1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵(线段树,树状数组)
- HDU 1166 敌兵布阵(树状数组,基础)
- HDU 1166 敌兵布阵(线段树之单点更新)
- HDU - 1166.敌兵布阵
- HDU 1166 敌兵布阵 (线段树)
- HDU1166敌兵布阵 分块解法,分块练习
- HDU 1166 敌兵布阵(线段树查询+单点更新)
- HDU-1166-敌兵布阵
- HDU 1166 敌兵布阵
- HDU 1166 敌兵布阵(树状数组)
- HDU--1166--敌兵布阵--线段树--基础题咯
- hdu 1166 敌兵布阵
- hdu 1166敌兵布阵