#include <iostream>
using namespace std;
const int MAX = 8005;
//先把牛从小到大排好,然后一个个取,取完要把相应牛删除
//很明显取的时候取当前第pre[i]+1大的数字
struct Node {
int l, r, num;//num代表[l, r]区间的数字个数
int mid() { return (l + r) >> 1; }
}Tree[MAX * 4];
int pre[MAX], ans[MAX];
void buildTree(int idx, int l, int r)
{
Tree[idx].l = l;
Tree[idx].r = r;
Tree[idx].num = r - l + 1;
if (l == r)
return;
int m = Tree[idx].mid();
buildTree(idx << 1, l, m);
buildTree(idx << 1 | 1, m + 1, r);
}
int query(int idx, int n)
{
Tree[idx].num--;
if (Tree[idx].l == Tree[idx].r)
return Tree[idx].l;
if (Tree[idx << 1].num < n)
query(idx << 1 | 1, n - Tree[idx << 1].num);
else
query(idx << 1, n);
}
int main(void)
{
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
int n;
while (cin >> n)
{
buildTree(1, 1, n);
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;
}
hdu 2711 Lost Cows
最新推荐文章于 2021-08-10 11:48:51 发布