Cod sursa(job #2846158)

Utilizator Matei_PanzariuMatei Panzariu Matei_Panzariu Data 8 februarie 2022 20:47:56
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
int sol[30002],aib[30002],v[30002],n;
void update(int poz,int x)
{
    while(poz<=n)
    {
        aib[poz]+=x;
        poz+=(poz&(-poz));
    }
}
int ras(int poz)
{
    int ans=0;
    while(poz>0)
    {
        ans+=aib[poz];
        poz-=(poz&(-poz));
    }
    return ans;
}
int cautare(int x)
{
    int st=1,dr=n;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(ras(mij)<x)
            st=mij+1;
        else
            dr=mij-1;
    }
    return st;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
        update(i,1);
    }
    for(int i=n;i>=1;i--)
    {
        int k=cautare(v[i]);
        sol[k]=i;
        update(k,-1);
    }
    for(int i=1;i<=n;i++)
        cout<<sol[i]<<'\n';
}