#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<vector>
#include<math.h>
#include<stack>
#include<map>
typedef long long LL;
#define rtl rt<<1
#define rtr rt<<1|1
using namespace std;
const int MAXN = 200000+10;
const int MAX = 2e6+10;
int n, t, cnt;
struct node
{
int pos, w;
} lxt[MAXN];
int num[MAX], a[MAX], ans[MAX];
void update1(int l, int r, int value, int rt)
{
if(l==r)
{
num[rt] = value;
return;
}
int mid = (l+r)>>1;
update1(l, mid, value, rtl);
update1(mid+1, r, value, rtr);
num[rt] = num[rtl]+num[rtr];
}
void update(int pos, int w, int L, int R, int rt)
{
// cout<<L<<" "<<R<<" "<<w<<endl;
if(L==R)
{
num[rt] = 0;
ans[L] = w;
return;
}
int mid = (L+R)>>1;
if(pos<=num[rtl])update(pos, w, L, mid, rtl);
else update(pos-num[rtl], w, mid+1, R, rtr);
num[rt]--;
}
int main()
{
while(~scanf("%d", &n))
{
int k = 1;
for(int i = 1; i<n; ++i)
k<<=1;
// cout<<"k="<<k<<endl;
update1(1, n, 1, 1);
// for(int i = 1; i<k; ++i)printf("%d ", num[i]);printf("\n");
for(int i = 0; i<n; ++i)
scanf("%d%d", &lxt[i].pos, &lxt[i].w);
for(int i = n-1; i>=0; --i)
{
update(lxt[i].pos+1, lxt[i].w, 1, n, 1);
//for(int i = 1; i<k; ++i)printf("%d ", ans[i]);printf("\n");
}
for(int i = 1; i<=n; ++i)
printf("%d%c", ans[i], (i==n)?'\n':' ');
}
return 0;
}
POJ-2828-Buy Tickets
最新推荐文章于 2019-09-24 15:39:44 发布