Cod sursa(job #2010812)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 14 august 2017 14:11:56
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>
#define Nmax 30001
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int v[Nmax];
int r[Nmax];
int arb[4*Nmax];
int poz,sol;
void update(int nod, int p, int q)
{
    if(p==q)
        arb[nod]=1;
    else
    {
        int m=(p+q)/2;
        if(poz<=m)
            update(2*nod,p,m);
        else update(2*nod+1,m+1,q);
        arb[nod]=arb[2*nod]+arb[2*nod+1];
    }
}
void querry(int nod, int p, int q, int val)
{
    if(p==q)
    {
        sol=p;
        arb[nod]=0;
    }
    else
    {
        int m=(p+q)/2;
        if(val<=arb[2*nod])
            querry(2*nod,p,m,val);
        else
            querry(2*nod+1,m+1,q,val-arb[2*nod]);
        arb[nod]=arb[2*nod]+arb[2*nod+1];
    }
}
int main()
{
    int n,i;
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
        poz=i;
        update(1,1,n);
    }
    for(i=n;i;i--)
    {
        querry(1,1,n,v[i]);
        r[sol]=i;
    }
    for(i=1;i<=n;i++)
        g<<r[i]<<'\n';

    return 0;
}