Cod sursa(job #2829647)

Utilizator Simon2712Simon Slanina Simon2712 Data 8 ianuarie 2022 20:18:19
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>

using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
const int N=30011;
int n,aib[N],v[N],vrez[N];
void adaug(int nod,int val)
{
    int i;
    for(i=nod;i<=n;i+=(i&(-i)))
        aib[i]+=val;
}
int f2(int nod)
{
    int s=0;
    for(int i=nod;i>0;i-=(i&(-i)))
        s+=aib[i];
    return s;
}
int f(int i)
{
    int st=1,dr=n,mij,s,poz=1000000;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        s=f2(mij);
        if(s==i)
            poz=min(poz,mij);
        if(s>=i)
            dr=mij-1;
        else
            st=mij+1;
    }
    return poz;
}
int main()
{
    int i,a,x;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        adaug(i,1);
    }
    for(i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    for(i=n;i>0;i--)
    {
        x=f(v[i]);
        vrez[x]=i;
        adaug(x,-1);
    }
    for(i=1;i<=n;i++)
        cout<<vrez[i]<<'\n';
    return 0;
}