- Buy Tickets POJ
来源:互联网 发布:jquery查找子元素数组 编辑:程序博客网 时间:2024/04/27 01:27
**题目意思:有n个数,进行n次操作,每次操作有两个数pos, ans。pos的意思是把ans放到第pos 位置的后面,pos后面的数就往后推一位。最后输出每个位置的ans。
**
这个线段树还是挺好的题目。。
也想到了反过来,但是觉得一个一个去找就不可以了,,
所以这个地方就用到了线段树。。
int n;int p[N],val[N];int ans[N],sum[N<<2],tl[N<<2],tr[N<<2];void build(int ll,int rr,int i){ tr[i]=rr;tl[i]=ll; if(ll==rr){ sum[i]=1;return ; } build(ll,md,ls),build(md+1,rr,rs); sum[i]=sum[ls]+sum[rs];}void update(int p,int i){ if(tl[i]==p&&tr[i]==p){ sum[i]=0;return; } int mid=(tr[i]+tl[i])>>1; if(p<=mid)update(p,ls); else update(p,rs); sum[i]=sum[ls]+sum[rs];}int query(int k,int ll,int rr,int i){ if(tl[i]==tr[i])return tl[i]; if(sum[ls]>=k)return query(k,ll,md,ls); return query(k-sum[ls],md+1,rr,rs);}int main(){ while(~sf("%d",&n)){ rep(i,1,n)sf("%d%d",&p[i],&val[i]); build(1,n,1); for(int i=n;i>=1;--i){ int t=query(p[i]+1,1,n,1); ans[t]=val[i]; update(t,1); } rep(i,1,n)pf("%d%c",ans[i],i==n?'\n':' '); }}
阅读全文
0 0
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- POJ 2828 Buy Tickets
- Poj 2828 Buy Tickets
- poj 2828 buy tickets
- POJ 2828 Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- POJ 2828 - Buy Tickets
- POJ 2828 - Buy Tickets
- POJ-2828-Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- poj 2828 Buy Tickets
- POJ 2828 Buy Tickets
- POJ 2828 Buy Tickets
- 让IE支持CSS3选择器的方法(利用JS)
- SPIN路由协议
- mybaits一些基础应用
- 曾鸣:跟马云创业总结的四个心得 | 阿里内部干货
- 卷积神经网络(CNN)理解
- - Buy Tickets POJ
- Android系统UI显示图层控制方法
- linux设置默认启动到字符界面
- MUI开发注意事项 Uncaught ReferenceError: plus is not defined
- 计算公式封装
- 单调栈问题系列
- 2.ARM中的异常中断基本概念
- JNI实现源码分析【四 函数调用】
- 正确的 Composer 扩展包安装方法