线段树
区间存储空位数
逆序插入即可
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
int pos[200001],val[200001],newpos[200001];
struct point{
int l,r;
int num;
}tree[600000];
void build(int s,int t,int id){
tree[id].l=s;
tree[id].r=t;
tree[id].num=t-s+1;
if(s!=t){
int mid=(s+t)>>1;
build(s,mid,id<<1);
build(mid+1,t,(id<<1)+1);
}
}
/*void update(int s,int id){
if(tree[id].l==tree[id].r){
tree[id].num=0;
return;
}
int mid=(tree[id].l+tree[id].r)>>1;
if(mid>=s)
update(s,id*2);
else
update(s,id*2+1);
tree[id].num=tree[id*2].num+tree[id*2+1].num;
}*/
int query(int id,int tem){
tree[id].num--;
if(tree[id].l==tree[id].r)
return tree[id].l;
int mid=(tree[id].l+tree[id].r)>>1;
if(tree[(id<<1)].num>=tem)
return query((id<<1),tem);
return query((id<<1)+1,tem-tree[(id<<1)].num);
}
int main(){
int i,j;
while(scanf("%d",&n)==1){
for(i=1;i<=n;i++)
scanf("%d %d",&pos[i],&val[i]);
build(1,n,1);
for(i=n;i>=1;i--){
int s=query(1,pos[i]+1);
newpos[s]=val[i];
//update(s,1);
}
for(i=1;i<n;i++)
printf("%d ",newpos[i]);
printf("%d\n",newpos[n]);
/*for(i=1;i<=n;i++){
printf("%d",newpos[i]);
if(i!=n)
printf(" ");
}
printf("\n");*/ //这几处导致G++ TLE
}
}
分享到:
相关推荐
poj2828解题报告,希望能帮到志同道合的算法爱好者
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
POJ第1861题源码 POJ第1861题源码 POJ第1861题源码
北大POJ1159-Palindrome 解题报告+AC代码
C语言 poj npu 西工大 C语言Poj答案全完整打包,给有需要的朋友
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
poj分类poj分类poj分类poj分类
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告
poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告
北大POJ2002-Squares 解题报告+AC代码
POJ1503解答 POJ1503解答,正确答案(已通过POJ)
poj 1659解题报告poj 1659解题报告poj 1659解题报告poj 1659解题报告
POJ1048,加强版的约瑟夫问题 难度中等
POJ1083的代码,POJ1083的代码,POJ1083的代码
poj 百练 题目分类 poj 百练 题目分类
POJ上的一道题目,自己写的代码,因为想下载别人的, 所以就放上了。
poj 1001答案
POJ2968代码有用,欢迎下载,POJ代码
Poj中一些题目的源代码,里面共有二十多道题目,OI