Cod sursa(job #2106219)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 15 ianuarie 2018 13:24:24
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");






int ARB[120000];
int pozitii[30000];
int marime;

int dreapta(int st,int dr,int nod){
if(st==dr){
    return ARB[nod];
}

else return ARB[nod]+dreapta((st+dr)/2+1,dr,nod*2+1);
}

void generare_initiala(int st,int dr,int nod){
if(st==dr){
    ARB[nod]=1;
    return;
}
else{
    generare_initiala(st,(st+dr)/2,nod*2);
    generare_initiala((st+dr)/2+1,dr,nod*2+1);
    ARB[nod]=dreapta(st,(st+dr)/2,nod*2);
}



}

void adaugare(int st,int dr,int nod,int poz,int nr){
if(st==dr){
    ARB[nod]=0;
    pozitii[st]=nr;
    return;
}
  if(ARB[nod]>=poz){


    adaugare(st,(st+dr)/2,nod*2,poz,nr);
  }
else{
    adaugare((st+dr)/2+1,dr,nod*2+1,poz-ARB[nod],nr);

}
   ARB[nod]=dreapta(st,(st+dr)/2,nod*2);


}


int main()
{
int nr;
in>>nr;
generare_initiala(1,nr,1);
int numere[nr+1];
for(int i=0;i<nr;i++)in>>numere[i];
for(int i=nr-1;i>=0;i--)adaugare(1,nr,1,numere[i],i);
for (int i=1;i<=nr;i++)cout<<pozitii[i]+1<<'\n';

    return 0;
}