/*Interval Tree*/
#include <iostream>
using namespace std;
const int maxn = 8000 + 5;
struct node {
int l, r, len;
};
node tree[maxn * 4];
int n;
int ans[maxn], pre[maxn];
void build(int l, int r, int root)
{
tree[root].l = l;
tree[root].r = r;
tree[root].len = r - l + 1;
if (l == r) return;
int mid = (l + r) >> 1;
build(l, mid, root << 1);
build(mid + 1, r, root << 1 | 1);
}
int query(int root, int num)
{
tree[root].len--;
if (tree[root].l == tree[root].r)
return tree[root].l;
if (tree[root << 1].len < num)
return query(root << 1 | 1, num - tree[root << 1].len);
if (tree[root << 1].len >= num)
return query(root << 1, num);
}
int main()
{
while (cin >> n) {
pre[0] = 0;
build(1, n, 1);
for (int i = 1; i < n; ++i) {
cin >> pre[i];
}
for (int i = n - 1; i >= 0; --i) {
ans[i] = query(1, pre[i] + 1);
}
for (int i = 0; i < n; ++i) cout << ans[i] << endl;
}
return 0;
}
POJ2182 Lost Cows
最新推荐文章于 2022-09-03 21:45:05 发布