Cod sursa(job #3323132)

Utilizator MateiDiaconuDiaconu Matei Stefan MateiDiaconu Data 17 noiembrie 2025 11:27:26
Problema Schi Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 30000

int v[MAXN + 1], n;
int sol[MAXN + 1];
int aib[MAXN + 1];


int lsb(int x){
    return x & (-x);
}

void update(int poz, int val){
    int i;
    for(i = poz; i <= n; i += lsb(i)){
        aib[i] += val;
    }
}

int cauta(int x){
    int poz, pas, sum;
    poz = 0;
    sum = 0;
    for(pas = 1 << 14; pas > 0; pas /= 2){
        if((poz + pas) <= n && (sum + aib[poz + pas]) < x){
            poz += pas;
            sum += aib[poz];
        }
    }
    return poz + 1;
}

int main()
{
    FILE *fin, *fout;
    fin = fopen("schi.in", "r");
    fout = fopen("schi.out", "w");

    int i, poz;
    // n declarat global

    fscanf(fin, "%d", &n);

    for(i = 1; i <= n; i++){
        fscanf(fin, "%d", &v[i]);
        update(i, 1);
    }

    for(i = n; i > 0; i--){
        poz = cauta(v[i]);
        sol[poz] = i;
        update(poz, -1);
    }

    for(i = 1; i <= n; i++){
        fprintf(fout, "%d\n", sol[i]);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}