Cod sursa(job #1580713)

Utilizator aetherAlexandra Vanca aether Data 26 ianuarie 2016 01:28:39
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");

int i,T,N,K,P,v[200005],r[220005],aint[220005],maxi;

void build(int st,int dr,int pos)
    {
        if (st > dr || pos > N << 2)
            return;

        if (st == dr)
            aint[pos]=1;
        else
        {

        int mij=(st+dr)>>1;

        build(st,mij,pos<<1);
        build(mij+1,dr,(pos<<1)+1);

        aint[pos]=aint[pos<<1]+aint[(pos<<1)+1];
        }
    }
void update(int st,int dr,int pos,int val)
    {
        if (st > dr || pos > N << 2)
            return;

        if (st == dr)
            {
                r[st]=i;
                aint[pos]=0;
            }

        int mij=(st+dr)>>1;

        if (val <= aint[pos<<1])
            update(st,mij,pos<<1,val);
        else
            update(mij+1,dr,(pos<<1)+1,val-aint[pos<<1]);

        aint[pos]=aint[pos<<1] + aint[(pos<<1)+1];

    }

int main()
{
    f>>N;
    for (i=1;i<=N;++i)
        f>>v[i];

    build(1,N,1);

    for(i=N;i;--i)
        update(1,N,1,v[i]);
    for (i=1;i<=N*4;++i)
        if (r[i])
            g<<r[i]<<'\n';

    return 0;
}