Pagini recente » Cod sursa (job #153791) | Cod sursa (job #1689077) | Monitorul de evaluare | Cod sursa (job #286048) | Cod sursa (job #1350396)
#include <cstdio>
using namespace std;
int N;
int v[30001];
int arbint[100001];
int rez[30001];
int w;
void gas(int nod, int a, int b, int c) {
if(a == b) {
rez[a] = w;
} else if(arbint[2 * nod] >= c) {
gas(2 * nod, a, (a + b) / 2, c);
} else {
gas(2 * nod + 1, (a + b) / 2 + 1, b, c - arbint[2 * nod]);
}
arbint[nod]--;
}
void make(int nod, int a, int b) {
arbint[nod] = b - a + 1;
if(a == b)
return;
make(2 * nod, a, (a + b) / 2);
make(2 * nod + 1, (a + b) / 2 + 1, b);
}
int main() {
int i, j;
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d", &N);
for(i = 1; i <= N; i++)
scanf("%d", &v[i]);
make(1, 1, N);
for(i = N; i >= 1; i--) {
w = i;
gas(1, 1, N, v[i]);
}
for(i = 1; i <= N; i++)
printf("%d\n", rez[i]);
return 0;
}