Cod sursa(job #1350378)

Utilizator Sanduleac_VladSanduleac Vllad Alexandru Sanduleac_Vlad Data 20 februarie 2015 19:35:55
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
using namespace std;

int N;
int v[30001];
int arbint[100001];
int rez[30001];
int w;

void gas(int nod, int a, int b, int c) {
    if(a == b) {
        rez[a] = w;
    } else if(arbint[2 * nod] >= c) {
        gas(2 * nod, a, (a + b) / 2, c);
    } else {
        gas(2 * nod + 1, (a + b) / 2 + 1, b, c - arbint[2 * nod]);
    }
    arbint[nod]--;
}

int main() {
    int i, j;
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
    scanf("%d", &N);
    for(i = 1; i <= N; i++)
        scanf("%d", &v[i]);
    arbint[1] = N;
    for(i = 2; arbint[i / 2] != 1; i++) {
        if(i % 2 == 0) {
            arbint[i] = (arbint[i / 2] + 1) / 2;
        } else {
            arbint[i] = arbint[i / 2] - (arbint[i / 2] + 1) / 2;
        }
    }
    for(i = N; i >= 1; i--) {
        w = i;
        gas(1, 1, N, v[i]);
    }
    for(i = 1; i <= N; i++)
        printf("%d\n", rez[i]);
    return 0;
}