线段树典型例题--poj2828
2012-07-23 17:11
302 查看
逆序处理。
注意到如果逆序插入,则每次插入的位置都是第x个空位。
所以可以用线段树来寻找第x个合法位置
【代码】
注意到如果逆序插入,则每次插入的位置都是第x个空位。
所以可以用线段树来寻找第x个合法位置
【代码】
#include <iostream> #include <cstring> #include <string> #include <cstdio> #include <algorithm> using namespace std; const int N=200005; int sum[N*3],pos ,val ,p ; int n; void build(int i,int l,int r) { sum[i]=r-l+1; if (l==r) return; int mid=(l+r)/2; build(i*2,l,mid); build(i*2+1,mid+1,r); } void ins(int i,int l,int r,int pos,int val) { sum[i]--; if (l==r) { p[l]=val; return; } int mid=(l+r)/2; if (sum[i*2]-pos>=0) ins(i*2,l,mid,pos,val); else ins(i*2+1,mid+1,r,pos-sum[i*2],val); } int main() { int i; freopen("in","r",stdin); while (scanf("%d",&n)!=EOF) { for (i=1;i<=n;i++) scanf("%d%d",&pos[i],&val[i]); build(1,1,n); for (i=n;i>=1;i--) ins(1,1,n,pos[i]+1,val[i]); for (i=1;i<n;i++) printf("%d ",p[i]); printf("%d\n",p ); } }
相关文章推荐
- 线段树典型例题--poj2777
- 线段树典型例题--poj2482
- 线段树典型例题--poj2528
- 线段树典型例题--poj3277
- 线段树-基础,典型例题的完整代码
- 线段树典型例题--poj3667 hotel
- 线段树例题5
- 【例题】【线段树】连续区间
- poj2828-Buy Tickets(线段树,单点更新)
- C++——最短路&&线段树 例题——Board
- 蓝桥杯C语言培训3 典型问题的递归框架 例题6 代表团出访(组合枚举)
- POJ2828 Buy Tickets 线段树好题
- poj2828 Buy Tickets 线段树端点更新
- POJ2828:Buy Tickets(线段树)
- poj2828 线段树单点更新
- 并查集(模板&典型例题整理)
- java多态的一道典型的例题
- 线段树的典型应用之POJ 2823 Sliding Window解题报告
- 关于二进制序列的两道典型例题(位运算符)
- 蓝桥杯C语言培训3 典型问题的递归框架 例题3 组合计数(元素互不相同)