Cod sursa(job #2953624)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 11 decembrie 2022 19:54:01
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

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

int poz[30005],n,aib[30005];
int fin[30005];
int ans[30005];

int query(int p)
{
    int sum = 0;
    for (int i = p; i >= 1; i -= (i & -i))
        sum += aib[i];
    return sum;
}

void update(int p)
{
    for (int i = p; i <= n; i += (i & -i))
        aib[i]++;
}

bool incerc(int p,int c)
{
    int pz = poz[c] + query(p);
    if (pz > p)
        return false;
    return true;
}

int main()
{
    in >> n;
    for (int i = 1; i <= n; i++)
        in >> poz[i];
    for (int i = n; i >= 1; i--)
    {
        int st = 0,pas = 1 << 14;
        while (pas != 0)
        {
            if (st + pas < n and incerc(st + pas,i) == false)
                st += pas;
            pas /= 2;
        }
        fin[i] = st + 1;
        //cout << fin[i] << ' ';
        update(fin[i]);
    }
    for (int i = 1; i <= n; i++)
        ans[fin[i]] = i;
    for (int i = 1; i <= n; i++)
        out << ans[i] << '\n';
    return 0;
}