Cod sursa(job #2783327)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 14 octombrie 2021 11:29:48
Problema Schi Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>

#define MAX_N 30000

int n;
int p[MAX_N], ans[MAX_N + 1], aib[MAX_N + 1];

void updateAIB( int i, int a ) {
    while ( i <= n ) {
        aib[i] += a;
        i += (i & -i);
    }
}

int queryAIB( int i ) {
    int a;

    a = 0;
    while ( i > 0 ) {
        a += aib[i];
        i -= (i & -i);
    }

    return a;
}

int main() {
    FILE *fin, *fout;
    int st, dr, mij, i;

    fin = fopen( "schi.in", "r" );
    fscanf( fin, "%d", &n );
    for ( i = 0; i < n; i++ ) {
        fscanf( fin, "%d", &p[i] );
        updateAIB( i + 1, 1 );
    }
    fclose( fin );

    for ( i = n - 1; i >= 0; i-- ) {
        st = 0;
        dr = n;
        while ( dr - st > 1 ) {
            mij = (st + dr) / 2;
            if ( queryAIB( mij ) < p[i] )
                st = mij;
            else
                dr = mij;
        }
        ans[dr] = i + 1;
        updateAIB( dr, -1 );
    }

    fout = fopen( "schi.out", "w" );
    for ( i = 1; i <= n; i++ )
        fprintf( fout, "%d\n", ans[i] );
    fclose( fout );

    return 0;
}