Cod sursa(job #3134347)

Utilizator AlexTrandafir09Trandafir Alexandru Ionut AlexTrandafir09 Data 28 mai 2023 22:00:36
Problema Schi Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("../schi.in");
ofstream g("../schi.out");
int n;
int arbore[10000],v[10000],r[10000];
void construire(int i_nod, int i_min, int i_max){
    if (i_min == i_max)
    { arbore[i_nod]=1;
        return;}
    int mij= (i_min + i_max) / 2;
    construire(i_nod * 2, i_min, mij);
    construire(i_nod * 2 + 1, mij + 1, i_max);
    arbore[i_nod]= arbore[i_nod * 2] + arbore[i_nod * 2 + 1];
}

int cauta(int i_nod, int i_min, int i_max, int p){
    if (i_min == i_max) {
        arbore[i_nod]=0;
        return i_min;
    }
    int mij= (i_min + i_max) / 2,x;
    if (p <= arbore[i_nod * 2]) {
        x = cauta(i_nod * 2, i_min, mij, p);
    }
    else x=cauta(i_nod * 2 + 1, mij + 1, i_max, p - arbore[i_nod * 2]);
    arbore[i_nod]= arbore[i_nod * 2] + arbore[i_nod * 2 + 1];
    return x;
}

int main()
{
    int i;
    f>>n;
    for (i=1;i<=n;i++) f>>v[i];
    construire(1, 1, n);

    for (i=n;i;i--){
        r[cauta(1,1,n,v[i])]=i;
    }
    for (i=1;i<=n;i++)
        g<<r[i]<<endl;
    return 0;
}