Cod sursa(job #1580706)

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

int i,T,N,K,P,v[100005],r[120005],aint[120005],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;
}