Cod sursa(job #3226683)

Utilizator NiffSniffCojocaru Calin Marcu NiffSniff Data 22 aprilie 2024 15:55:26
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops")
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
string file = "schi";
ifstream fin (file + ".in");
ofstream fout (file + ".out");
int aib[30001],n, v[30001], r[30001];

inline void modificare(int p)
{
    while (p<=n)
    {
        aib[p]--;
        p += (p & -p);
    }
}

inline int interogare(int p)
{
    int s = 0;
    while (p)
    {
        s += aib[p];
        p -= (p & -p);
    }
    return s;
}

inline int cb(int p)
{
    int st = 1, dr = n;
    while (st<=dr)
    {
        int mid = (st+dr)/2;
        if (interogare(mid) >= p)
        {
            dr = mid - 1;
        }
        else
        {
            st = mid + 1;
        }
    }
    return st;
}
int main()
{
    fin >> n;
    for (int i=1; i<=n; i++)
    {
        fin >> v[i];
        aib[i] = (i & -i);
    }
    for (int i=n; i>=1; i--)
    {
        int p = cb(v[i]);
        modificare(p);
        r[p] = i;
    }
    for (int i=1; i<=n; i++)
        fout << r[i] << '\n';
}