Cod sursa(job #3041931)

Utilizator andreibrosPeta Andrei Mathias andreibros Data 2 aprilie 2023 20:17:42
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int v[30005],arb[120005], clasament[30005];
void build(int nod, int st, int dr)
{
    if(st==dr)
    {
        arb[nod]=1;
        return;
    }
    int m=(st+dr)/2;
    build(2*nod,st,m);
    build(2*nod+1,m+1,dr);
    arb[nod]=arb[2*nod]+arb[2*nod+1] ;
}
int pozitie(int nod, int st, int dr, int conc)
{
    if(st==dr)
    {
        arb[nod]--;
        //cout<<st<<" ";
        return st;
    }
    int m=(st+dr)/2 ,rez;
    if(arb[2*nod]>=conc)
       {
           rez=pozitie(2*nod,st,m,conc);
       }
    else
        {
           rez= pozitie(2*nod+1,m+1,dr,conc-arb[2*nod]);
        }
    arb[nod]--;
    return rez;
}
int main()
{
    int n;
    in>>n;
    build(1,1,n);
    for(int i=1; i<=n ; i++)
        in>>v[i];
    for(int i=n; i>=1;i--)
    {
        clasament[pozitie(1,1,n,v[i])]=i;
        /*for(int j=1; j<=2*n-1; j++)
            cout<<arb[j]<<" ";
        cout<<endl;*/
    }
     for(int i=1; i<=n;i++)
     {
         out<<clasament[i]<<"\n";
     }
    return 0;
}