Pagini recente » Cod sursa (job #2297073) | Cod sursa (job #2179791) | Cod sursa (job #2306637) | Cod sursa (job #224347) | Cod sursa (job #1053108)
#include<cstdio>
using namespace std;
FILE *f=fopen("schi.in","r");
FILE *g=fopen("schi.out","w");
int n,val,poz;
int a[30005],sol[30005],v[120005];
void query(int st,int dr,int x){
if(st==dr){
poz=st;
v[x]=0;
return;
}
int m=(st+dr)/2;
if(v[2*x]<val){
val-=v[2*x];
query(m+1,dr,2*x+1);
}
else query(st,m,2*x);
--v[x];
}
void update(int st,int dr,int x){
v[x]=dr-st+1;
if(st==dr) return;
int m=(st+dr)/2;
update(st,m,2*x);
update(m+1,dr,2*x+1);
}
int main(){
fscanf(f,"%d",&n);
update(1,n,1);
for(int i=1;i<=n;++i) fscanf(f,"%d",&a[i]);
for(int i=n;i>=1;--i){
val=a[i];
query(1,n,1);
sol[poz]=i;
}
for(int i=1;i<=n;++i) fprintf(g,"%d\n",sol[i]);
return 0;
}