Pagini recente » Cod sursa (job #86260) | Cod sursa (job #1480480) | Cod sursa (job #1104560) | Cod sursa (job #2198707) | Cod sursa (job #1476406)
#include <stdio.h>
#include <assert.h>
#define Smerenie 32768
#define Nadejde 30001
int N;
int a[Nadejde];
int order[Nadejde];
int aib[Smerenie + 1];
void add(int x, int val) {
do {
aib[x] += val;
x += x & -x;
} while (x <= Smerenie);
}
int bSearch(int val) {
int x = 0, interval = (Smerenie >> 1);
while (interval) {
assert(x + interval <= Smerenie);
if (aib[x + interval] < val) {
val -= aib[x += interval];
}
interval >>= 1;
}
return x + 1;
}
int main(void) {
int i;
FILE *f = fopen("schi.in", "r");
fscanf(f, "%d\n", &N);
for (i = 1; i <= N; i++) {
fscanf(f, "%d", &a[i]);
add(i, 1);
}
fclose(f);
f = fopen("schi.out", "w");
for (i = N; i > 0; i--) {
int pos = bSearch(a[i]);
order[pos] = i;
add(pos, -1);
}
for (i = 1; i <= N; i++) {
fprintf(f, "%d\n", order[i]);
}
fclose(f);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}