Cod sursa(job #3131471)

Utilizator fabian_anghelFabian Anghel fabian_anghel Data 20 mai 2023 13:01:51
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
using namespace std;
int M,N,arb[500001],x,a,b,c,v[500001],sol[500001];
ifstream f ("ski.in");
ofstream g ("ski.out");
void upd(int nod, int st, int dr, int p)
{
    if(st==dr)
        arb[nod]=1;
    else
    {
        int mij=(st+dr)/2;
        if(p<=mij)
            upd(2*nod,st,mij,p);
        else
            upd(2*nod+1,mij+1,dr,p);
        arb[nod]=arb[2*nod]+arb[2*nod+1];
    }
}
int query(int nod, int st, int dr, int p)
{
    if(st==dr)
    {
        arb[nod]=0;
        return st;
    }
    else
    {
        int mij=(st+dr)/2, k=0;
        if(p<=arb[2*nod])
            k=query(2*nod,st,mij,p);
        else
            k=query(2*nod+1,mij+1,dr,p-arb[2*nod]);
        arb[nod]=arb[2*nod]+arb[2*nod+1];
        return k;
    }
}
int main()
{
    f>>N;
    for(int i=1;i<=N;i++)
    {
        f>>v[i];
        upd(1,1,N,i);
    }
    for(int i=N;i>=1;i--)
        sol[query(1,1,N,v[i])]=i;
    for(int i=1;i<=N;i++)
        g<<sol[i]<<'\n';
    f.close();
    g.close();
    return 0;
}