Cod sursa(job #2020126)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 9 septembrie 2017 14:28:16
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 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;
}