Pagini recente » Cod sursa (job #1680791) | Cod sursa (job #1456669) | Cod sursa (job #1177002) | Cod sursa (job #1052779) | Cod sursa (job #2209845)
#include <bits/stdc++.h>
using namespace std;
int n, v[30005], aib[30005], sol[30005];
void update(int idx, int val)
{
while(idx <= n){
aib[idx] += val;
idx += (idx&(-idx));
}
}
int read(int idx)
{
int sum = 0;
while(idx){
sum += aib[idx];
idx -= (idx&(-idx));
}
return sum;
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &v[i]);
for (int i = n; i >= 1; --i){
int x = v[i];
int lo = 1, hi = n, m, ans;
for (m = (lo+hi)>>1; lo <= hi; m = (lo+hi)>>1)
if(m-read(m) >= x){
ans = m;
hi = m-1;
}else lo = m+1;
sol[ans] = i;
update(ans, 1);
}
for (int i = 1; i <= n; ++i)
printf("%d\n", sol[i]);
return 0;
}