Pagini recente » Cod sursa (job #1036279) | Cod sursa (job #1636546) | Cod sursa (job #197297) | Cod sursa (job #740400) | Cod sursa (job #3323132)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 30000
int v[MAXN + 1], n;
int sol[MAXN + 1];
int aib[MAXN + 1];
int lsb(int x){
return x & (-x);
}
void update(int poz, int val){
int i;
for(i = poz; i <= n; i += lsb(i)){
aib[i] += val;
}
}
int cauta(int x){
int poz, pas, sum;
poz = 0;
sum = 0;
for(pas = 1 << 14; pas > 0; pas /= 2){
if((poz + pas) <= n && (sum + aib[poz + pas]) < x){
poz += pas;
sum += aib[poz];
}
}
return poz + 1;
}
int main()
{
FILE *fin, *fout;
fin = fopen("schi.in", "r");
fout = fopen("schi.out", "w");
int i, poz;
// n declarat global
fscanf(fin, "%d", &n);
for(i = 1; i <= n; i++){
fscanf(fin, "%d", &v[i]);
update(i, 1);
}
for(i = n; i > 0; i--){
poz = cauta(v[i]);
sol[poz] = i;
update(poz, -1);
}
for(i = 1; i <= n; i++){
fprintf(fout, "%d\n", sol[i]);
}
fclose(fin);
fclose(fout);
return 0;
}