Cod sursa(job #1880167)

Utilizator Dan_RadulescuRadulescu Dan Dan_Radulescu Data 15 februarie 2017 16:32:29
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<stdlib.h>
using namespace std;

FILE *f1 = fopen("schi.in", "r");
FILE *f2 = fopen("schi.out", "w");

int sol[30001], n, i, j, arb[70000], a[30001];

void creare(int nod, int st, int dr)
{
    if (st == dr)
    {
        arb[nod] = 1;
        return;
    }
    int mij;
    mij = (st + dr) / 2;
    creare(2*nod, st, mij);
    creare(2*nod+1, mij + 1, dr);
    arb[nod] = arb[2*nod] + arb[2*nod+1];
}

int poz(int nod, int nr, int st, int dr)
{
    arb[nod]--;
    if (st == dr)
    {
        return st;
    }
    int mij = (st+dr)/2;
    if (nr <= arb[2*nod]) return poz(2*nod, nr, st, mij);
    return poz(2*nod+1, nr - arb[2*nod], mij + 1, dr);
}

int main()
{
    fscanf(f1, "%d", &n);
    for (i = 1; i <= n; i++)
        fscanf(f1, "%d", &a[i]);
    creare(1,1,n);
    for (i = n; i >= 1; i--)
    {
        sol[poz(1,a[i],1,n)] = i;
    }
    for (i = 1; i <= n; i++)
        fprintf(f2, "%d\n", sol[i]);
    fclose(f1);
    fclose(f2);
    return 0;
}