HDU 1166 敌兵布阵 线段树 点更新
2011-09-28 13:38
411 查看
点更新线段树问题
//4671028 2011-09-28 12:40:35 Accepted 1166 78MS 1720K 2395 B G++ nkhelloworld //4671030 2011-09-28 12:41:04 Accepted 1166 46MS 1764K 2395 B C++ nkhelloworld //点更新线段树 #include <cstdio> #define MAXN 50000 struct SEGMENTTREE { int left,right,sum; }tree[MAXN*4]; int n; void buildsegtree(int pos,int left,int right) { tree[pos].left = left; tree[pos].right = right; if(left==right) { scanf("%d",&tree[pos].sum); return ; } int mid = (left+right)>>1; buildsegtree(pos<<1,left,mid); buildsegtree(pos<<1|1,mid+1,right); tree[pos].sum = tree[pos<<1].sum + tree[pos<<1|1].sum; } void add(int root,int addpos,int num) { if(tree[root].left == tree[root].right) { tree[root].sum += num; return ; } int mid = (tree[root].left + tree[root].right)>>1; if(addpos <=mid) { add(root<<1,addpos,num); } else { add(root<<1|1,addpos,num); } tree[root].sum = tree[root<<1].sum + tree[root<<1|1].sum; } int query(int root,int a,int b) { int ans = 0; if(tree[root].left == a && tree[root].right == b) { ans += tree[root].sum; return ans; } int mid = (tree[root].left+tree[root].right)>>1; if(a > mid) { ans = query(root<<1|1,a,b); } else if(b <= mid) ans = query(root<<1,a,b); else { ans = query(root<<1,a,mid) + query(root<<1|1,mid+1,b); } return ans; } int main() { int i,j,totcase,casenum; char op[10]; scanf("%d",&totcase); for(casenum = 1;casenum<=totcase;casenum++) { printf("Case %d:\n",casenum); scanf("%d",&n); buildsegtree(1,1,n); while(scanf("%s",op)) { if(op[0] == 'E') break; if(op[0] == 'A') { scanf("%d%d",&i,&j); add(1,i,j); } else if(op[0] == 'S') { scanf("%d%d",&i,&j); add(1,i,-j); } else if(op[0] == 'Q') { scanf("%d%d",&i,&j); printf("%d\n",query(1,i,j)); } } } return 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 敌兵布阵(线段树:点更新,区间求和)
- HDU 1166 敌兵布阵(线段树单点更新)
- HDU 1166 敌兵布阵 线段树单点更新求和