Pagini recente » Cod sursa (job #1548095) | Cod sursa (job #251525) | Cod sursa (job #2421765) | Cod sursa (job #1051793) | Cod sursa (job #2106219)
#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;
}