【线段树】hdu1166敌兵布阵
来源:互联网 发布:软件部门 英文缩写 编辑:程序博客网 时间:2024/04/28 13:44
/*水水的线段树点修改:----------------------------------------------------------------void build(int l,int r,int o)建树{ int mid = (l + r) / 2; a[o].left = l; a[o].right = r; a[o].num = 0; if(a[o].left == a[o].right)到达叶子节点 return ; build(l, mid, lc);向左走 build(mid + 1, r, rc);向右走}--------------------------------------------------------------------------------void update(int l, int r, int o)//L营增加R个人{ if(a[o].left <= l && a[o].right >= l)在该区间则更新num a[o].num += r; if(a[o].left == a[o].right)叶子结点返回 return ; int mid = (a[o].left + a[o].right) / 2; if(l <= mid) update(l, r, lc);左走 else update(l, r, rc);右走}-----------------------------------------------------------------------------------void query(int l, int r, int o)//在id处加L到R的和{ int mid = (a[o].left + a[o].right) / 2; if(a[o].left == l && a[o].right == r)找到区间更新sum的值 { sum += a[o].num; return ; } if(r <= mid) query(l, r, lc);左走 else if(l > mid) query(l, r, rc);右走 else { query(l, mid, lc); query(mid+1, r, rc); }}-------------------------------------------------------------------------------------*/#include <iostream>#include <cstdio>#include <cstring>#define INF 0x3f3f3f3f#define lc o*2#define rc o*2+1using namespace std;const int N = 50050*3;struct node{ int left,right; int num;}a[N];int n,sum;void build(int l,int r,int o){ int mid = (l + r) / 2; a[o].left = l; a[o].right = r; a[o].num = 0; if(a[o].left == a[o].right) return ; build(l, mid, lc); build(mid + 1, r, rc);}void update(int l, int r, int o)//L营增加R个人{ if(a[o].left <= l && a[o].right >= l) a[o].num += r; if(a[o].left == a[o].right) return ; int mid = (a[o].left + a[o].right) / 2; if(l <= mid) update(l, r, lc); else update(l, r, rc);}void query(int l, int r, int o)//在id处加L到R的和{ int mid = (a[o].left + a[o].right) / 2; if(a[o].left == l && a[o].right == r) { sum += a[o].num; return ; } if(r <= mid) query(l, r, lc); else if(l > mid) query(l, r, rc); else { query(l, mid, lc); query(mid+1, r, rc); }}int main(){ //freopen("input.txt","r",stdin); int T; int kase = 1; int num; int l,r; char s[10]; cin>>T; while(T--) { sum = 0; printf("Case %d:\n",kase++); scanf("%d",&n); build(1, n, 1); for(int i = 1; i <= n; i++) { scanf("%d",&num); update(i, num, 1); } while(scanf("%s",s)) { if(s[0] == 'E') break; if(s[0] == 'Q') { scanf("%d%d",&l,&r); query(l, r, 1); printf("%d\n",sum); sum = 0; } if(s[0] == 'A') { scanf("%d%d",&l,&r); update(l, r, 1); } if(s[0] == 'S') { scanf("%d%d",&l,&r); update(l, -r, 1); } } } return 0;}
----------------------------------------
wuwuwuwuuwuwuwu.....................
0 0
- 线段树 hdu1166 (敌兵布阵)
- 【线段树】 hdu1166 敌兵布阵
- hdu1166 敌兵布阵 线段树
- hdu1166敌兵布阵 (线段树)
- hdu1166 敌兵布阵,线段树
- HDU1166 敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- hdu1166- 敌兵布阵线段树
- 【线段树】hdu1166敌兵布阵
- hdu1166 敌兵布阵(线段树)
- 线段树 HDU1166 敌兵布阵
- hdu1166-敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- hdu1166-敌兵布阵 线段树
- hdu1166敌兵布阵 线段树
- HDU1166 敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- HDU1166 -敌兵布阵(线段树)
- (搜索)跳棋系列4
- QT编程系列1--QT学习前需知
- 中国剩余定理模板(互质版和非互质版)
- RHadoop实现线性回归
- HDU 1170 Balloon Comes!
- 【线段树】hdu1166敌兵布阵
- Xaml技术:浅析为什么说一个标签就是new一个对象?
- zookeeper的python客户端
- Halcon代码加密
- UVALive 5033 I'm Telling the Truth 二分图匹配
- C语言之指针
- My brief introduction to K-SVD
- Json简介
- Linux驱动学习——中断、定时器