Cod sursa(job #1540138)

Utilizator DobosDobos Paul Dobos Data 2 decembrie 2015 11:11:59
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX  = 30005;
int v[4*NMAX],A[NMAX],B[NMAX];
void buildtree(int nod,int l,int r){
    if(r < l) return;
    if(l == r){
        v[nod] = 1;
        return ;
    }
    int mij = (l + r) >> 1;
    buildtree(nod << 1,l,mij);
    buildtree((nod << 1) + 1,mij + 1, r);
    v[nod] = r - l + 1;
}
void update(int nod,int l,int r,int poz,int i){
    if(l == r){
        v[nod] = 0;
        B[l] = i;
        return;
    }
    int mij = (l + r) >> 1;
    if(poz <= v[nod<<1])
        update(nod<<1,l,mij,poz,i);
    else
        update((nod<<1) + 1,mij + 1,r,poz - v[nod<<1],i);
    v[nod]--;
}
int main()
{
    int n;
    freopen("schi.in","r",stdin);
    freopen("sci.out","w",stdout);
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        scanf("%d", &A[i]);
    buildtree(1,1,n);
    for(int i = n; i >= 1;i--) update(1,1,n,A[i],i);
    for(int i = 1; i <= n; i++)
        printf("%d\n", B[i]);
    return 0;
}