Cod sursa(job #1691271)

Utilizator mariakKapros Maria mariak Data 17 aprilie 2016 18:52:42
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>
#define Nmax 30002
FILE *fin  = freopen("schi.in", "r", stdin);
FILE *fout = freopen("schi.out", "w", stdout);

using namespace std;
int n, pos[Nmax], aib[Nmax], sol[Nmax];
void update(int pos, int val)
{
    do
    {
        aib[pos] += val;
        pos += pos & -pos;
    }
    while(pos <= n);
}
int bsearch(int x)
{
    int i = 0, p = 1 << 15;
    while(p)
    {
        if(i + p <= n && aib[i + p] < x)
        {
            i += p;
            x -= aib[i];
        }
        p >>= 1;
    }
    return i + 1;
}
void read()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; ++ i)
        scanf("%d", &pos[i]);
}
void solve()
{
    int i, k;
    /// initialize aib
    for(i = 1; i <= n; ++ i)
        update(i, 1);

    for(i = n; i >= 1; -- i)
    {
        k = bsearch(pos[i]);
        sol[k] = i;
        update(k, -1);
    }
}
void write()
{
    for(int i = 1; i <= n; ++ i)
        printf("%d\n", sol[i]);
}
int main()
{
    read();
    solve();
    write();
    return 0;
}