Cod sursa(job #2952908)

Utilizator Danut200333Dumitru Daniel Danut200333 Data 10 decembrie 2022 10:50:16
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int aib[30001],n,yo,va[30001],sol[30001],i,pos;
void update(int p,int a)
{
    int i;
    for(i=p;i<=n;i+=(i&-i))aib[i]+=a;
}
int suma(int p)
{
    int s=0,i;
    for(i=p;i>0;i-=(i&-i))s+=aib[i];
    return s;
}
int pozitie(int a)
{
    int p=0,aux=0,x,y,i;
    for(i=yo;i>0;i>>=1)
    {
        x=p+i;
        if(x<=n)
        {
            y=a-aib[x];
            if(y>0)
            {
                a=y;
                p=x;
            }
            else if(y==0) aux=x;
        }
    }
    return aux;
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>va[i];
        update(i,1);
    }
    yo=1;
    while(yo<n)yo<<=1;
    for(i=n;i>=1;i--)
    {
        pos=pozitie(va[i]);
        sol[pos]=i;
        update(pos,-1);
    }
    for(i=1;i<=n;i++)fout<<sol[i]<<'\n';
    return 0;
}