Cod sursa(job #1794534)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 1 noiembrie 2016 13:54:19
Problema Schi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>
int q[30001],sol[30001],arb[70001],val,x,vval;
void update(int st,int dr,int pos,int x)
{
    if(st!=dr){
        if(x>(st+dr)/2) update((st+dr)/2+1,dr,pos*2+1,x);
        else update(st,(st+dr)/2,pos*2,x);
    }
    arb[pos]--;
}
void search(int st,int dr,int pos)
{
    if(st!=dr){
        if(arb[pos*2]>=val)
            search(st,(st+dr)/2,pos*2);
        else{
            val-=arb[pos*2];
            search((st+dr)/2+1,dr,pos*2+1);
        }
    }
    else
        x=st;
}
void form(int st,int dr,int pos){
    if(st!=dr){
        form(st,(st+dr)/2,pos*2);
        form((st+dr)/2+1,dr,pos*2+1);
    }
    arb[pos]=dr-st+1;
}
int main()
{
    int i,n;
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    scanf("%d",&n);
    for(i=1; i<=n; i++)
        scanf("%d",&q[i]);
    form(1,n,1);
    for(i=n; i>0; i--)
    {
        val=vval=q[i];
        search(1,n,1);
        update(1,n,1,x);
        sol[x]=i;
    }
    for(i=1; i<=n; i++)
        printf("%d\n",sol[i]);

    return 0;
}