Pagini recente » Cod sursa (job #2427243) | Cod sursa (job #1807272) | Cod sursa (job #1641975) | Cod sursa (job #552710) | Cod sursa (job #2427220)
#include <stdio.h>
int arb[131073];
int input[30000];
int output[30000];
int query(int p, int node, int st, int dr) {
if (st == dr) {
arb[node] = 1;
return st;
}
int m = (st + dr) / 2;
int libere = m - st + 1 - arb[2*node];
int r;
if (p <= libere) {
r = query(p, 2 * node, st, m);
} else {
r = query(p - libere, 2 * node + 1, m + 1, dr);
}
arb[node]++;
return r;
}
int main() {
FILE *fin = fopen("schi.in", "r"),
*fout = fopen("schi.out", "w");
int n, i;
fscanf(fin, "%d", &n);
for (i = 0; i < n; i++) {
fscanf(fin, "%d", &input[n - i - 1]);
}
for (i = 0; i < n; i++) {
int r = query(input[i], 1, 0, n - 1);
output[r] = n - i;
}
for (i = 0; i < n; i++) {
fprintf(fout, "%d\n", output[i]);
}
return 0;
}