Pagini recente » Cod sursa (job #174596) | Cod sursa (job #102005) | Cod sursa (job #2904749) | Cod sursa (job #1630655) | Cod sursa (job #1777026)
#include <stdio.h>
#include <stdlib.h>
#define zero(x) (x&(-x))
int aib[30001], v[30001], clas[30001];
inline void update(int poz, int val, int n){
for(poz; poz<=n; poz+=zero(poz))
aib[poz]+=val;
}
inline int suma(int poz){
int sum=0;
for(poz; poz>0; poz-=zero(poz))
sum+=aib[poz];
return sum;
}
inline int cautBin(int val, int n){
int b=1, e=n, m, x, min=2000000000;
while(b<=e){
m=(b+e)/2;
x=suma(m);
if(x==val && m<min)
min=m;
else if(x<val)
b=m+1;
else
e=m-1;
}
return min;
}
int main()
{
FILE *fin, *fout;
int n, i, a;
fin=fopen("schi.in", "r");
fscanf(fin, "%d", &n);
for(i=1; i<=n; i++){
fscanf(fin, "%d", &v[i]);
aib[i]=zero(i);
}
fclose(fin);
for(i=n; i>0; i--){
a=cautBin(v[i], n);
clas[a]=i;
update(a, -1, n);
}
fout=fopen("schi.out", "w");
for(i=1; i<=n; i++)
fprintf(fout, "%d\n", clas[i]);
fclose(fout);
return 0;
}