Cod sursa(job #854447)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 13 ianuarie 2013 16:56:12
Problema Schi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#define LS (poz<<1)
#define RS (poz<<1)+1
#define  INF (1<<29)
#define NMAX 60002
using namespace std;

ifstream in("schi.in");
ofstream out("schi.out");

int N,Arb[NMAX],Interm[NMAX],Final[NMAX];
int value,Pos;

void Update(int poz,int start,int final)
{
    if(start == final)
        Arb[poz] = value;
    else
    {
        int mij = (start + final) / 2;
        if(Pos<=mij)
             Update(LS,start,mij);
        else Update(RS,mij+1,final);
        Arb[poz] = Arb[LS] + Arb[RS];
    }
}

void Query(int poz,int start,int final,int sum)
{
    if(start == final)
        Pos = start;
    else
    {
        int mij = (start + final) / 2;
        if(Arb[LS]>=sum)Query(LS,start,mij,sum);
        else Query(RS,mij+1,final,sum-Arb[LS]);
    }
}

int main()
{
    int i,x;
    in>>N;
    for(value = 1,i=1;i<=N;i++)
        in>>Interm[i],Pos = i,Update(1,1,N);
    for(value = 0,i=N; i ;i--)
    {
        Query(1, 1, N, Interm[i]);
        Final[Pos] = i;
        Update(1, 1, N);
    }
    for(i=1;i<=N;i++)
        out<<Final[i]<<'\n';
    return 0;
}