Cod sursa(job #2391073)

Utilizator EmplopiStefan Nitu Emplopi Data 28 martie 2019 17:27:23
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>

int arb[60000], v[30000], rsp[30000];

int querry(int poz, int x, int put){
    if(poz>=put)
        return poz;
    if(arb[poz*2]>=x)
        return querry(poz*2, x, put);
    return querry(poz*2+1, x-arb[poz*2], put);
}

void update(int poz){
    if(poz!=1){
        arb[poz/2]=arb[poz/2*2]+arb[poz/2*2+1];
        update(poz/2);
    }
}

int main(){
    FILE *fin, *fout;
    int n, i, put, j, var;
    fin=fopen("schi.in", "r");
    fout=fopen("schi.out", "w");
    fscanf(fin, "%d", &n);
    for(i=0;i<n;i++)
        fscanf(fin, "%d", &v[i]);
    put=1;
    while(put*2<=n)
        put*=2;
    for(i=0;i<put;i++){
        arb[put+i]=1;
        update(put+i);
    }
    for(i=n-1;i>=0;i--){
        var=querry(1, v[i], put)-put+1;
        rsp[var]=i+1;
        arb[put+var-1]=0;
        update(put+var-1);
    }
    for(i=1;i<=n;i++)
        fprintf(fout, "%d\n", rsp[i]);
    fclose(fin);
    fclose(fout);

    return 0;
}