Mai intai trebuie sa te autentifici.
Cod sursa(job #298775)
Utilizator | Data | 6 aprilie 2009 13:05:38 | |
---|---|---|---|
Problema | Schi | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.76 kb |
#include <stdio.h>
int x,poz,A[65600];
void update(int nod,int l,int r){
if (l==r){A[nod]=x;return;}
int m=(l+r)>>1;
if (poz<=m)update(nod*2,l,m);
else update(nod*2+1,m+1,r);
A[nod]=A[nod*2]+A[nod*2+1];
}
void query(int nod,int l,int r){
if (l==r){poz=l;return;}
int m=(l+r)>>1;
if (A[nod*2]<x){x-=A[nod*2];query(nod*2+1,m+1,r);}
else query(nod*2,l,m);
}
int main(){
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
int n,i,a[30005],loc[30005];
scanf("%d",&n);
for (i=1;i<=n;++i)scanf("%d",&a[i]);
for (i=1;i<=n;++i){x=1;poz=i;update(1,1,n);}
for (i=n;i>0;--i){
x=a[i];
query(1,1,n);
loc[poz]=i;
x=0;
update(1,1,n);
}
for (i=1;i<=n;++i)printf("%d\n",loc[i]);
return 0;
}