Cod sursa(job #3136609)

Utilizator ciacliboiiiciacli stefan ciacliboiii Data 7 iunie 2023 11:02:05
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int poz[30001], pozi[30001], n, pozfin[30001], aib[30001], ls, ld, mij;
void update(int pos, int val)
{
    for(int i = pos; i <= n; i += i & (-i))
        aib[i] += val;
}
int query(int pos)
{
    int sum = 0;
    for(int i = pos; i > 0; i -= i & (-i))
        sum += aib[i];
    return sum;
}
int cb(int val)
{
    ls = 1;
    ld = n;
    int ans = 0;
    while(ls <= ld)
    {
        mij = (ls + ld) / 2;
        if(val <= query(mij))
        {
            ans = mij;
            ld = mij - 1;
        }
        else
            ls = mij + 1;
    }
    return ans;
}
int main()
{
    fin >> n;
    for(int i = 1; i <= n; ++ i)
    {
        fin >> poz[i];
        update(i, 1);
    }
    for(int i = n; i; --i)
    {
        int pozi = cb(poz[i]);
        pozfin[pozi] = i;
        update(pozi, -1);
    }
    for(int i = 1; i <= n; ++ i)
        fout << pozfin[i] << '\n';
    return 0;
}