#include <cstdlib> #include <cstdio> #include <iostream> using namespace std; #define lson l, m, rt << 1 #define rson m + 1, r, rt << 1 | 1 const int maxn = 222222; int sum[maxn << 2]; int id; void build(int l, int r, int rt) { sum[rt] = r - l + 1; if(l == r) return; int m = (l + r) >> 1; build(lson); build(rson); } //线段树搜索的时候是按照节点的顺序搜索,故具有先后顺序 void update(int p, int l, int r, int rt) { sum[rt]--; int m = (l + r) >> 1; if(l == r) { //定义一个全局变量来保存返回的位置 id = l; return; } if(p <= sum[rt << 1]) update(p, lson); else update(p - sum[rt << 1], rson); } int a[maxn]; int b[maxn]; int ans[maxn]; int main() { int n; while(~scanf("%d", &n)) { build(1, n, 1); for(int i = 0; i < n; i++) scanf("%d %d", &a[i], &b[i]); for(int i = n - 1; i >= 0; i--) { update(a[i] + 1, 1, n, 1) ; ans[id] = b[i]; } for(int i = 1; i < n; i++) printf("%d ", ans[i]); printf("%d\n", ans[n]); } system("pause"); return 0; }