Pagini recente » Cod sursa (job #817972) | Cod sursa (job #1219833) | Cod sursa (job #3040871) | Cod sursa (job #1025242) | Cod sursa (job #1854842)
#include <iostream>
#include <fstream>
#define MAX 30005
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int liber[4*MAX], n, v[MAX], clas[MAX];
void build(int nod, int st, int dr){
if(st==dr)
liber[nod]=1;
else{
int mij=(st+dr)/2;
build(nod*2, st, mij);
build(nod*2+1, mij+1, dr);
liber[nod]=dr-st+1; /// nr de poz libere pe intervale
}
}
int clasament(int nod, int st, int dr, int inter, int finall){
if(st==dr){
liber[nod]=0;
clas[st]=finall;
}
else{
int mij=(st+dr)/2;
if(inter <= liber[nod*2])
clasament(nod*2, st, mij, inter, finall);
else
clasament(nod*2+1, mij+1, dr, inter-liber[nod*2], finall);
liber[nod]--;
}
}
int main()
{
fin>>n;
for(int i=1; i<=n ;i++)
fin>>v[i];
build(1,1,n);
for(int i=n; i>=1; --i)
clasament(1,1,n,v[i],i);
for(int i=1; i<=n; ++i)
fout<<clas[i]<<'\n';
return 0;
}