Cod sursa(job #858828)

Utilizator marius135Dumitran Adrian Marius marius135 Data 19 ianuarie 2013 13:58:39
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
 
#define size 128
#define maxn 30001
 
int nr[maxn], cate[maxn], poz[maxn], N, V[maxn];
int bucket_nr;
 
int afla(int x) {
     
    int i;
    for( i = 0; i <= bucket_nr; ++i) {
        if( cate[i] < x) 
            x-= cate[i];
        else break;
    }
    for( i = i * size;; i++) {
        if( nr[i] == 1) 
            x--;
        if( x == 0) return i;
    }
}
 
void scoate(int val) {
    nr[val] = 0;
    cate[val>>7]--;
}
 
int main() {
     
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
    scanf("%d", &N);
    bucket_nr = maxn/size + 1;
    for( int i = 1; i <= N; ++i){
        nr[i] = 1;
        cate[i>>7]++;
        scanf("%d", &V[i]);
    }
     
    for( int i = N; i >= 1; --i) {
        int x = afla(V[i]);
        poz[x] = i;
        scoate(x);
    }
    for( int i = 1; i <= N; ++i)
        printf("%d\n", poz[i]);
 
    return 0;
}