Cod sursa(job #3319765)

Utilizator Tibi201eweREWR Tibi201 Data 3 noiembrie 2025 11:00:06
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#define MAXN 30000

int rez[MAXN+1];
int aib[MAXN+1];
int poz[MAXN+1];
int n;

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

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

int main()
{
    FILE *fin, *fout;
    int i,ans;
    fin=fopen("schi.in", "r");
    fscanf(fin, "%d", &n);
    for(i=0; i<n; i++){
        fscanf(fin, "%d", &poz[i]);
    }
    fclose(fin);
    for(i=1; i<=n; i++){
        aib[i]++;
        aib[i+(i&(-i))]+=aib[i];
    }
    for(i=n-1; i>=0; i--){
        ans=find(poz[i]);
        rez[ans]=i+1;
        update(ans, -1);
    }
    fout=fopen("schi.out", "w");
    for(i=1; i<=n; i++)
        fprintf(fout, "%d\n", rez[i]);
    fclose(fout);
    return 0;
}