Cod sursa(job #1837611)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 30 decembrie 2016 01:12:59
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define MAXN 30050

using namespace std;

int n;
int aib[MAXN], sol[MAXN], a[MAXN];

inline int zero(int x)
{
	return x & (-x);
}

void update(int ind, int val)
{
    for (int i = ind; i <= n; i += zero(i))
		aib[i] += val;
}

int src(int sum)
{
    int crt, step;
    for (step = 1; step <= n; step <<= 1);
    for (crt = 0; step; step >>= 1)
        if (crt + step <= n && aib[crt+step] <= sum) {
			crt += step;
            sum -= aib[crt];
        }
	return crt;
}

int main()
{
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);

    scanf("%d ", &n);
    for (int i = 1; i <= n; i++)
		update(i, 1);
    for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	for (int i = n; i >= 1; i--)
	{
		int pos;
        sol[pos = (src(a[i]-1)+1)] = i;
        update(pos, -1);
    }
    for (int i = 1; i <= n; i++)
		printf("%d\n", sol[i]);

    return 0;
}