Cod sursa(job #1053108)

Utilizator BLz0rDospra Cristian BLz0r Data 12 decembrie 2013 11:27:16
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#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;
}