hdu 2711 Lost Cows

来源:互联网 发布:联合智业怎么样知乎 编辑:程序博客网 时间:2024/06/05 11:57
#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);elsequery(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;}

原创粉丝点击