UESTC 1059 线段树离散化
来源:互联网 发布:发那科机器人编程实例 编辑:程序博客网 时间:2024/06/05 16:59
秋实大哥与小朋友
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
秋实大哥以周济天下,锄强扶弱为己任,他常对天长叹:安得广厦千万间,大庇天下寒士俱欢颜。
所以今天他又在给一群小朋友发糖吃。
他让所有的小朋友排成一行,从左到右标号。在接下去的时间中,
他有时会给一段区间的小朋友每人
这对于没上过学的孩子来说实在太困难了,所以你看不下去了,请你帮助小朋友回答所有的询问。
Input
第一行包含两个整数
接下来的
0 l r v : 表示秋实大哥给[l,r]这个区间内的小朋友每人v颗糖1 x : 表示秋实大哥想知道第x个小朋友手里现在有几颗糖
Output
对于每一个
Sample input and output
3 40 1 3 11 20 2 3 31 3
14
题解:先离散化,再建树,错了10次忘记了使用hash后的的值,记得每次查询需要都要使
用hash后的的值,这里可以用set,map方便的去重,映射。
#include<iostream>#include<string>#include<cstdio>#include<algorithm>#include<map>#include<set>#include<vector>using namespace std;#define LL long long #define N 300000set<int>li;map<int,int>Hash;struct point{int lc,rc;LL add,sum;}tree[N*4];struct guiyi{int k1,x1,y1;LL v1;guiyi(){}guiyi(int _k,int _x,int _y,LL _v):k1(_k),x1(_x),y1(_y),v1(_v){}};vector<guiyi>eg;void pushdown(int rt){if(tree[rt].add){tree[rt<<1].add+=tree[rt].add;tree[rt<<1|1].add+=tree[rt].add;tree[rt<<1].sum+=tree[rt].add;tree[rt<<1|1].sum+=tree[rt].add;tree[rt].add=0;}}void build(int L,int R,int rt){tree[rt].lc=L;tree[rt].rc=R;tree[rt].add=0;tree[rt].sum=0;if(L==R)return ;int mid=(tree[rt].lc+tree[rt].rc)>>1;build(L,mid,rt<<1);build(mid+1,R,rt<<1|1);}void update(int L,int R,int rt,LL v){if(tree[rt].lc==L&&tree[rt].rc==R){tree[rt].add+=v;tree[rt].sum+=v;return ;}pushdown(rt);int mid=(tree[rt].lc+tree[rt].rc)>>1;if(R<=mid)update(L,R,rt<<1,v);else if(L>mid)update(L,R,rt<<1|1,v);else{update(L,mid,rt<<1,v);update(mid+1,R,rt<<1|1,v);}}LL query(int pos,int rt){if(tree[rt].lc==tree[rt].rc&&tree[rt].lc==pos){return tree[rt].sum;}pushdown(rt);int mid=(tree[rt].lc+tree[rt].rc)>>1;if(pos<=mid)query(pos,rt<<1);else query(pos,rt<<1|1);}int main(){#ifdef CDZSCfreopen("i.txt","r",stdin);#endifint k,x,y;LL v;int n,m;while(~scanf("%d%d",&n,&m)){int poli=1;Hash.clear();eg.clear();li.clear();while(m--){scanf("%d",&k);if(k==1){scanf("%d",&x);eg.push_back(guiyi(k,x,0,0));li.insert(x);}else{scanf("%d%d%lld",&x,&y,&v);eg.push_back(guiyi(k,x,y,v));li.insert(x);li.insert(y);}}for(set<int>::iterator it=li.begin();it!=li.end();it++){Hash[*it]=poli;poli++;}build(1,poli-1,1);for(int i=0;i<eg.size();i++){if(eg[i].k1==1){printf("%lld\n",query(Hash[eg[i].x1],1));}else{int Lx,Ry;LL V;Lx=Hash[eg[i].x1];Ry=Hash[eg[i].y1];V=eg[i].v1;update(Lx,Ry,1,V);}}}return 0;}
0 0
- UESTC 1059 线段树离散化
- UESTC 1501 - Defense Lines 离散化+线段树优化DP
- 【线段树+离散化】Uestc-数据结构专题训练【B】
- UESTC 1059 秋实大哥与小朋友(线段树+离散化)
- 2016 UESTC Training for Data Structures B - 卿学姐与基本法 CDOJ 1325 线段树+离散化
- UESTC 1600 艾尔大停电 线段树+扫描线、矩形面积并、浮点数的离散化
- 线段树+离散化
- 离散化 + 线段树
- 线段树离散化
- 线段树离散化
- UESTC 1425(线段树)
- UESTC 1324线段树
- POJ_2528 线段树+离散化
- HDU3577 离散化+线段树
- poj2528 线段树+离散化
- poj2528线段树+离散化
- hdu4325线段树+离散化
- POJ2528 离散化线段树
- 一步一步教你做ios推送
- rabbitmq 启动
- Nimble packages
- iOS隐藏状态栏
- angularJS学习之路(二十)---自定义指令---transclude的作用
- UESTC 1059 线段树离散化
- iOS 开发相机,相册权限问题,代码总结
- Bootstrap的Datatable详解
- UVa 11231 - Black and white painting
- 黑马程序员——网络编程一
- java 调用C的API
- generator函数
- aaa
- 如何调用外部的项目的Activity