Cod sursa(job #2667541)

Utilizator NeacsuMihaiNeacsu Mihai NeacsuMihai Data 3 noiembrie 2020 17:02:24
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin ("schi.in");
ofstream fout ("schi.out");

int n;
int v[30001], aib[30001], rez[30001];
void adaug(int x, int y)
{
    int i;
    for(i=x; i<=n; i+=i&(-i))
    {
        aib[i]+=y;
    }
}
void read()
{
    int i;
    fin>>n;
    for(i=1; i<=n; i++)
    {
        fin>>v[i];
    }
    for(i=1; i<=n; i++)
    {
        adaug(i, 1);
    }
}
int query(int x)
{
    int i, s=0;
    for(i=x; i>=1; i-=i&(-i)){
        s+=aib[i];
    }
    return s;
}
int cautbin(int x)
{
    int p, u, mij, sol=0;
    p=1;
    u=n;
    while(p<=u)
    {
        mij=(p+u)/2;
        if(query(mij)>=x)
        {
            sol=mij;
            u=mij-1;
        }
        else p=mij+1;
    }
    return sol;
}
void solve()
{
    int i, poz;
    for(i=n; i>=1; i--)
    {
        poz=cautbin(v[i]);
        rez[poz]=i;
        adaug(poz, -1);
    }
}
void write()
{
    for(int i=1; i<=n; i++)
    {
        fout<<rez[i]<<"\n";
    }
}
int main()
{
    read();
    solve();
    write();
}