Cod sursa(job #298775)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 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;
}