hdu1166 敌兵布阵(线段树)
2017-08-16 15:20
423 查看
题目链接:hdu1166 敌兵布阵
思路
单点更新,增加和减少。区间求和。
小结
看错题目,写成区间更新...WA了两发,WA在add打懒标记,更新当前节点时,乘以的是懒标记,而不是要更新的那个数。
代码
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int maxn = 50000; int tree[maxn<<2]; int add[maxn<<2]; char txt[100]; void pushup(int rt){ tree[rt] = tree[rt<<1] + tree[rt<<1|1]; } void pushdown(int rt, int len){ if(add[rt]!=0){ add[rt<<1] += add[rt]; tree[rt<<1] += (len - len/2) * add[rt]; add[rt<<1|1] += add[rt]; tree[rt<<1|1] += len/2 * add[rt]; add[rt] = 0; } } void build(int rt, int l, int r){ if(l==r){ scanf("%d", &tree[rt]); } else{ int mid = (l+r)>>1; build(rt<<1, l, mid); build(rt<<1|1, mid+1, r); pushup(rt); } } void Add(int rt, int a, int b, int l, int r, int x){ if(a<=l && r<=b){ add[rt] += x; tree[rt] += x * (r-l+1); } else{ pushdown(rt, r-l+1); int mid = (l+r)>>1; if(a<=mid) Add(rt<<1, a, b, l, mid, x); if(mid<b) Add(rt<<1|1, a, b, mid+1, r, x); pushup(rt); } } int query(int rt, int a, int b, int l, int r){ if(a<=l && r<=b){ return tree[rt]; } else{ int ans = 0; int mid = (l+r)>>1; pushdown(rt, r-l+1); if(a<=mid) ans += query(rt<<1, a, b, l, mid); if(mid<b) ans += query(rt<<1|1, a, b, mid+1, r); return ans; } } int main(){ int t, n, a, b, Case=0; scanf("%d", &t); while(t--){ scanf("%d", &n); memset(add, 0, sizeof(add)); build(1, 1, n); printf("Case %d:\n", ++Case); while(true){ scanf("%s", txt); if(txt[0]=='Q'){ scanf("%d%d", &a, &b); printf("%d\n", query(1, a, b, 1, n)); } else if(txt[0]=='A'){ scanf("%d%d", &a, &b); Add(1, a, a, 1, n, b); } else if(txt[0]=='S'){ scanf("%d%d", &a, &b); Add(1, a, a, 1, n, -b); } else{ break; } } } return 0; }
相关文章推荐
- HDU1166-敌兵布阵 (线段树)
- HDU1166 敌兵布阵 线段树||树状数组||CDQ分治 入门题复习
- HDU1166 敌兵布阵 线段树 入门
- HDU1166 敌兵布阵_线段树
- 线段树·HDU1166 敌兵布阵·单点更新区间求和
- hdu1166-敌兵布阵 线段树
- HDU1166:敌兵布阵(线段树点更新,区间查询)
- HDU1166 敌兵布阵(线段树基础题单节点更新区间查询)
- 线段树维护区间的和和单点更新-HDU1166-敌兵布阵
- hdu1166 敌兵布阵 (线段树模板)
- HDU1166_敌兵布阵(线段树/单点更新)
- 【HDU1166】敌兵布阵,线段树练习
- hdu1166 敌兵布阵 线段树 单点更新区间查询
- hdu1166 敌兵布阵 线段树
- hdu1166 敌兵布阵(线段树入门题)
- hdu1166 敌兵布阵 线段树
- hdu1166 敌兵布阵 线段树单点更新+区间求和
- hdu1166-敌兵布阵 线段树
- HDU1166 敌兵布阵 非递归线段树 & 递归线段树 & 树状数组
- hdu1166 敌兵布阵 线段树