Cod sursa(job #1560337)

Utilizator retrogradLucian Bicsi retrograd Data 2 ianuarie 2016 16:21:27
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>

using namespace std;

#define zeros(a) (a & -a)
#define MAXN 50000

int Sol[MAXN], AIB[MAXN], Place[MAXN];

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

    int n;
    cin>>n;

    for(int i=1; i<=n; i++) {
        cin>>Place[i];
        for(int j=i; j<=n; j+=zeros(j))
            AIB[j] += 1;
    }

    int M;
    for(M=1; M<=n; M<<=1);
    M>>=1;

    for(int i=n; i; i--) {
        int look = Place[i], sol = 0;

        for(int j=M; j; j>>=1) {
            if(sol + j <= n && AIB[sol + j] < look) {
                sol += j;
                look -= AIB[sol];
            }
        }
        sol += 1;

        Sol[sol] = i;

        for(int j=sol; j<=n; j+=zeros(j))
            AIB[j] -= 1;
    }

    for(int i=1; i<=n; i++)
        cout << Sol[i] << "\n";


    return 0;
}