线段数_HDU_1166
来源:互联网 发布:java base64 转c 编辑:程序博客网 时间:2024/06/16 06:44
初级的单点更新,区间求和
#include<iostream>const int maxn = 50050;using namespace std;struct node{ int l,r,d; int mid(){return (l+r)>>1;}};node tree[maxn<<2];void build(int l,int r,int rot){ tree[rot].l = l; tree[rot].r = r; if(l == r) { cin>>tree[rot].d; return; } int mid = tree[rot].mid(); build(l,mid,rot<<1); build(mid+1,r,rot<<1|1); tree[rot].d = tree[rot<<1].d+tree[rot<<1|1].d;}void updata(int l,int r,int rt,int w,int d){ if(l == r) { tree[rt].d += d; return; } int mid = tree[rt].mid(); if(w <= mid) updata(l,mid,rt<<1,w,d); else updata(mid+1,r,rt<<1|1,w,d); tree[rt].d = tree[rt<<1].d+tree[rt<<1|1].d;}int query(int l, int r, int rt, int ll,int rr){ if(ll<=l&&r<=rr) return tree[rt].d; int ans = 0,mid = tree[rt].mid(); if(mid>=ll)//为什么是大于等于 ans += query(l,mid,rt<<1,ll,rr); if(mid<rr)//为什么是小于 ans += query(mid+1,r,rt<<1|1,ll,rr); return ans;}int main(){ int t,n,x,y; char done[10]; scanf("%d",&t); for(int i = 1; i <= t; i++) { scanf("%d",&n); build(1,n,1); printf("Case %d:\n",i); while(scanf("%s",done)) { if(done[0]=='E')break; if(done[0]=='Q') { scanf("%d%d",&x,&y); printf("%d\n",query(1,n,1,x,y)); } if(done[0]=='A') { scanf("%d%d",&x,&y); updata(1,n,1,x,y); } if(done[0]=='S') { scanf("%d%d",&x,&y); updata(1,n,1,x,-y); } } } return 0;}
0 0
- 线段数_HDU_1166
- poj-3264 线段数
- GSS1 线段数
- 线段数应用(poj2828)
- 线段数_HDU_3074
- 线段数求和模板
- 线段数模板
- 【例题】【线段数】lazy_
- 线段数专题
- 线段数总结
- 线段数应用(poj2828)
- [线段数]hdu 4366 Successor
- hdu 4107 Gangster 线段数
- poj2299(逆序数+线段树)
- 线段树_逆序数
- 线段树---求逆序数
- 线段数(单点更新)
- hdu1394 逆序数-线段树
- iOS开发-Swift获取手机设备信息(UIDevice)
- Swift学习-枚举(Enumerations)的使用方法
- iOS开发-在Swift里使用AFNetworking方法
- Google hosts
- iOS开发-drawRect方法小技巧(超短)
- 线段数_HDU_1166
- js 操作cookie
- iOS开发-重写description方法,自定义控制台(log)信息
- 对普利姆算法的理解(大话数据结构)。
- STL之stack(栈)
- iOS开发-简单获取View截图图像(Quartz2D)
- poj 1195 Mobile phones(二维数组)
- iOS开发-使用宏自定义输出(NSLog)
- 学习前端