Pagini recente » Cod sursa (job #1081496) | Cod sursa (job #333401) | Cod sursa (job #2398526) | Cod sursa (job #3158761) | Cod sursa (job #46162)
Cod sursa(job #46162)
#include <cstdio>
const int NMAX = 1 << 15;
int N;
int AIB[NMAX], P[NMAX];
int A[NMAX], next[NMAX];
int parinte(int u) {
if (u != next[u])
next[u] = parinte(next[u]);
return next[u];
}
void update(int poz, int v) {
for (; poz <= N; poz += poz & ~(poz - 1))
AIB[poz] += v;
}
int query(int poz) {
int s;
for (s = 0; poz > 0; poz -= poz & ~(poz - 1))
s += AIB[poz];
return s;
}
int main(void) {
FILE *fin = fopen("schi.in", "rt");
FILE *fout = fopen("schi.out", "wt");
int i, u;
fscanf(fin, " %d", &N);
for (i = 1; i <= N; ++i) {
fscanf(fin, " %d", A + i);
next[i] = i;
}
for (i = N; i; --i) {
u = A[i];
u += query(u);
update(u, 1);
u = parinte(u);
P[u] = i; next[u] = u + 1;
}
for (i = 1; i <= N; ++i)
fprintf(fout, "%d\n", P[i]);
fclose(fin);
fclose(fout);
return 0;
}