Pagini recente » Cod sursa (job #1486511) | Cod sursa (job #2793051) | Cod sursa (job #1492035) | Cod sursa (job #159502) | Cod sursa (job #1350378)
#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]--;
}
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]);
arbint[1] = N;
for(i = 2; arbint[i / 2] != 1; i++) {
if(i % 2 == 0) {
arbint[i] = (arbint[i / 2] + 1) / 2;
} else {
arbint[i] = arbint[i / 2] - (arbint[i / 2] + 1) / 2;
}
}
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;
}