voidbuild(int p, int l, int r){ if (l == r) { s[p] = 1; return; } int mid = (l + r) >> 1; build(lc, l, mid), build(rc, mid + 1, r); s[p] = s[lc] + s[rc]; }
voidupdate(int p, int l, int r, int x, int v){ if (l == r) { a[l] = v; s[p] = 0; return; } int mid = (l + r) >> 1; if (s[lc] >= x) update(lc, l, mid, x, v); else update(rc, mid + 1, r, x - s[lc], v); s[p] = s[lc] + s[rc]; }
intmain(){ while (~scanf("%d", &n)) { build(1, 1, n); for (int i = 1; i <= n; ++i) scanf("%d%d", &op[i], &val[i]); for (int i = n; i >= 1; --i) update(1, 1, n, op[i] + 1, val[i]); for (int i = 1; i <= n; ++i) printf("%d ", a[i]); puts(""); } return0; }