Pagini recente » Clasamentul arhivei Infoarena Monthly | Cod sursa (job #717179) | Cod sursa (job #3180434) | Cod sursa (job #1982161) | Cod sursa (job #2133047)
#include<cstdio>
int aib[30005],n,v[30005],rasp[30005];
int update(int poz){
int i;
for(i=poz;i<=n;i=i+(i&(-i)))
aib[i]++;}
int query(int poz){
int i,s=0;
for(i=poz;i>0;i=i-(i&(-i)))
s=s+aib[i];
return s;}
int main(){
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
int i,nr,st,dr,mij,last;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=n;i>=1;i--){
st=1;
dr=n;
while(st<=dr){
mij=(st+dr)/2;
nr=query(mij);
if (mij-nr<v[i])
st=mij+1;
if (mij-nr>=v[i])
last=mij,dr=mij-1;}
update(last);
rasp[last]=i;}
for(i=1;i<=n;i++)
printf("%d\n",rasp[i]);
return 0;}