Pagini recente » Cod sursa (job #171348) | Cod sursa (job #2986720) | Cod sursa (job #3208446) | Cod sursa (job #883380) | Cod sursa (job #2783364)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 32768
int v[MAXN], arb[2 * MAXN], out[MAXN];
void find(int i, int n, int poz, int ind){
if(i <= (n - 1)){
if(poz <= arb[i * 2]){
find(i * 2, n, poz, ind);
}else{
find(i * 2 + 1, n, poz - arb[i * 2], ind);
}
arb[i]--;
}else{
out[i - (n - 1) - 1] = ind;
arb[i] = 0;
}
}
int main()
{
FILE *fin, *fout;
int n, i, p;
fin = fopen("schi.in", "r");
fscanf(fin, "%d", &n);
for(i = 0; i < n; i++){
fscanf(fin, "%d", &v[i]);
}
fclose(fin);
p = 1;
while(p < n){
p *= 2;
}
for(i = 0; i < p; i++){
arb[i + (p - 1)] = 1;
}
for(i = p - 1; 1 <= i; i--){
arb[i] = arb[i * 2] * 2;
}
for(i = n - 1; 0 <= i; i--){
find(1, p, v[i], i + 1);
}
fout = fopen("schi.out", "w");
for(i = 0; i < n; i++){
fprintf(fout, "%d\n", out[i]);
}
fclose(fout);
return 0;
}