Cod sursa(job #1390487)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 17 martie 2015 08:16:55
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<iostream>

int a[30001],res[30001],b[100001],n,pos;

void build(int nod,int val)
{
    b[nod]=val;
    if(val==1)
    {
        return;
    }
    build(2*nod+1,val/2);
    if(val%2==1)
    {
        build(2*nod,val/2+1);
    }
    else
    {
        build(2*nod,val/2);
    }
}

void solve(int nod,int s,int d,int val)
{
    b[nod]--;
    if(s==d)
    {
        pos=s;
        return;
    }
    int mij=(s+d)/2;
    if(b[nod*2]>=val)
    {
        solve(nod*2,s,mij,val);
    }
    else
    {
        val-=b[nod*2];
        solve(nod*2+1,mij+1,d,val);
    }
}

int main()
{
    FILE *fin,*fout;
    fin=fopen("schi.in","r");
    fout=fopen("schi.out","w");
    fscanf(fin,"%d",&n);
    for(int i=1;i<=n;i++)
    {
        fscanf(fin,"%d",&a[i]);
    }
    build(1,n);
    for(int i=n;i>=1;i--)
    {
        pos=-1;
        solve(1,1,n,a[i]);
        res[pos]=i;
    }
    for(int i=1;i<=n;i++)
    {
        fprintf(fout,"%d\n",res[i]);
    }
}