Pagini recente » Cod sursa (job #1179933) | Cod sursa (job #297850) | Cod sursa (job #387582) | Cod sursa (job #3211085) | Cod sursa (job #544553)
Cod sursa(job #544553)
#include<stdio.h>
FILE*f=fopen("schi.in","r");
FILE*g=fopen("schi.out","w");
int x,v[30001],s[30001],n,i,a[150000];
void init(int nod,int st,int dr){
if(st==dr){
a[nod]=1;
return ;
}
int nodst=nod<<1;
int noddr=nodst+1;
int m=(dr+st)>>1;
init(nodst,st,m);
init(noddr,m+1,dr);
a[nod]=a[nodst]+a[noddr];
}
void query(int nod,int st,int dr,int poz){
if(dr==st){
x=st;
a[nod]=0;
return ;
}
int nodst=nod<<1;
int noddr=nodst+1;
int m=(st+dr)>>1;
if(a[nodst]>=poz)
query(nodst,st,m,poz);
else
query(noddr,m+1,dr,poz-a[nodst]);
a[nod]=a[nodst]+a[noddr];
}
int main(){
fscanf(f,"%d",&n);
init (1,1,n);
for(i=1;i<=n;++i)
fscanf(f,"%d",&v[i]);
for(i=n;i;--i){
query(1,1,n,v[i]);
s[x]=i;
}
for(i=1;i<=n;++i)
fprintf(g,"%d\n",s[i]);
fclose(g);
fclose(f);
return 0;
}