Pagini recente » Cod sursa (job #3365579) | Cod sursa (job #3365580) | Cod sursa (job #3364539) | Cod sursa (job #3364570) | Cod sursa (job #3366808)
#include <iostream>
using namespace std;
int n, v[30001], aib[30001], rez[30001];
int ub(int x){
return (x & (-x));
}
void add(int x, int y){
int i;
for(i = x; i <= n; i+=ub(i)){
aib[i]+=y;
}
}
int numarare(int x){
int i, s = 0, st = 1, dr = n, mij;
while(st < dr){
mij = (st+dr)/2;
s = 0;
for(i = mij; i >= 1; i -= ub(i)){
s += aib[i];
}
if(s >= x) dr = mij;
else st = mij + 1;
}
return st;
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
int x, i;
scanf("%d", &n);
for(i = 1; i <= n; i++){
scanf("%d", &v[i]);
add(i, 1);
}
for(i = n; i >= 1; i--){
int p = numarare(v[i]);
rez[p] = i;
add(p, -1);
}
for(i = 1; i <= n; i++){
printf("%d\n", rez[i]);
}
return 0;
}