AcWing 244. 谜一样的牛
原题链接
简单
作者:
RainSure
,
2022-01-24 13:46:26
,
所有人可见
,
阅读 224
好难想到呀 虽然不难吧
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 100010;
int tr[maxn];
int res[maxn], h[maxn];
int n;
int lowbit(int x)
{
return x & -x;
}
int sum(int x)
{
int res = 0;
for(int i = x; i; i -= lowbit(i)) res += tr[i];
return res;
}
void add(int x, int c)
{
for(int i = x; i <= n; i += lowbit(i)) tr[i] += c;
}
int main()
{
cin >> n;
for(int i = 2; i <= n; i ++) cin >> h[i];
for(int i = 1; i <= n; i ++) add(i, 1);
for(int i = n; i >= 1; i --){
int x = h[i] + 1;
int l = 1, r = n;
while(l < r){
int mid = l + r >> 1;
if(sum(mid) >= x) r = mid;
else l = mid + 1;
}
res[i] = l;
add(l, -1);
}
for(int i = 1; i <= n; i ++) cout << res[i] << endl;
return 0;
}