Cod sursa(job #1248389)

Utilizator lorundlorund lorund Data 25 octombrie 2014 01:07:30
Problema Schi Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#define SIZE 30005

int n, v[SIZE];
int aib[SIZE], sol[SIZE];

void update(int x){
    while (x<=n){
        ++aib[x];
        x += ((x^(x-1))+1)>>1;
    }
}

int query(int x){
    int sum=0;

    while (x){
        sum += aib[x];
        x = x&(x-1);
    }
    return sum;
}

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

    scanf("%d", &n);
    for (int i=1; i<=n; ++i){
        scanf("%d", &v[i]);
    }
    for (int i=n; i; --i){
        int p = v[i]+query(v[i]);
        while (sol[p]) ++p;
        sol[p] = i;
        update(v[i]);
    }
    for (int i=1; i<=n; ++i){
        printf("%d\n", sol[i]);
    }
    return 0;
}