Cod sursa(job #2854728)

Utilizator robertanechita1Roberta Nechita robertanechita1 Data 21 februarie 2022 18:24:14
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, x, aib[30005], a[30005], sol[30005];

void Update(int k, int val)
{
    while(k <= n)
    {
        aib[k] += val;
        k = k + (k & -k);
    }
}

int Suma(int k)
{
    long long s = 0;
    while(k > 0)
    {
        s += aib[k];
        k = k - (k & -k);
    }
    return s;

}

int CB(int x)
{
    int st = 1, dr = n, mij, p;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(Suma(mij) == x)
        {
            p = mij;
            dr = mij - 1;
        }
        if(Suma(mij) < x)
            st = mij + 1;
        else
            dr = mij - 1;

    }
    return p;
}


int main()
{
    int x;
    fin >> n;
    for(int i = 1; i <= n; i++)
    {
        fin >> a[i];
        Update(i, 1);

    }
    for(int i = n; i >= 1; i--)
    {
        int poz = CB(a[i]);
        sol[poz] = i;
        Update(poz, -1);
    }
    for(int i = 1; i <= n; i++)
        fout << sol[i] << "\n";
    fout.close();

    return 0;
}