poj2828线段树
来源:互联网 发布:天龙八部龙纹评分数据 编辑:程序博客网 时间:2024/06/04 21:15
链接:http://poj.org/problem?id=2828
题意:车站有n个人在排队订票,下面n行代表第n个人,每行pos、val,val表示该人所带钱,pos表示排在该人前面比该人钱多的人的数量。输出排队的序列。
线段树解之。
#include<stdio.h>#include<string.h>struct aa{int l,r,len;}tree[202000*3];int num[200030];int val[200030];int pai[200030];void buildtree(int le,int ri,int v){int p,q;tree[v].l=le;tree[v].r=ri;tree[v].len=ri-le+1;if(le>=ri)return ;p=(ri+le)/2;q=v*2;buildtree(le,p,q);buildtree(p+1,ri,q+1);}int fun(int v,int len){int i,j;i=v*2;tree[v].len--;if(tree[v].l==tree[v].r)return tree[v].l;if(tree[i].len>=len)return fun(i,len);elsereturn fun(i+1,len-tree[i].len);}int main(){int i,j,n,m;while(scanf("%d",&n)>0) //这里如果换成while(scanf("%d",&n)>0,n)就会超时,坑爹的tle了n遍原来是这个,n惹的祸{for(i=1;i<=n;i++)scanf("%d%d",&num[i],&val[i]);buildtree(1,n,1);for(i=n;i>=1;i--)pai[fun(1,num[i]+1)]=val[i];for(i=1;i<=n;i++){if(i!=n)printf("%d ",pai[i]);elseprintf("%d\n",pai[i]);}}return 0;}
- poj2828【线段树】
- poj2828---线段树
- poj2828线段树
- poj2828~线段树倒推
- poj2828(线段树)
- poj2828线段树
- poj2828(线段树)
- POJ2828线段树
- poj2828 BuyTickets 线段树
- POJ2828(线段树)
- POJ2828线段树+逆序
- POJ2828 Buy Tickets 线段树
- 线段树典型例题--poj2828
- poj2828 线段树单点更新
- poj2828----线段树--------单点更新
- poj2828(线段树应用)
- POJ2828 Buy Tickets(线段树)
- 线段树点更新poj2828
- 浏览器缓存
- hdoj1042
- symfony2添加services
- 21 创建和删除进程的地址空间
- 22 堆的管理
- poj2828线段树
- sgu 176 Flow construction--有源汇 有上下界 最小流
- 多校第三场:hdu(4323:编辑距离算法)
- IIS备份
- codeforces 117C 拓扑排序 找三元环
- 23 Linux x86_64与i386区别之 —— 内存寻址
- 利用CSS设置div的最小高度(多浏览器兼容)代码
- Android 中input event的分析
- android 短信拦截思路