Pagini recente » Cod sursa (job #2986383) | Cod sursa (job #2322670) | Cod sursa (job #1626735) | Cod sursa (job #78342) | Cod sursa (job #2134108)
#include <fstream>
using namespace std;
const int N = 30000;
ifstream f("schi.in");
ofstream g("schi.out");
int n;
int arb[4*N];
void build(int st,int dr,int k){
if(st==dr){
arb[k] = 1;
}
else{
int mij =(st+dr)/2;
build(st,mij,2*k);
build(mij+1,dr,2*k+1);
arb[k] = (arb[2*k]+arb[2*k+1]);
}
//g<<k<<" "<<arb[k]<<"\n";
}
int v[N];
int x[N];
int num,poz;
void creere(int st,int dr,int k){
int mij = (st+dr)/2;
if(st == dr){
arb[k]--;
x[st] = poz;
return;
}
if(num <= arb[2*k]){
creere(st,mij,2*k);
arb[k] = arb[2*k+1]+arb[2*k];
}
else{
num -= arb[2*k];
creere(mij+1,dr,2*k+1);
arb[k] = arb[2*k+1]+arb[2*k];
}
}
void afisare(int st,int dr,int k){
g<<st<<" "<<dr<<" "<<arb[k]<<"\n";
if(st!=dr){
int mij =(st+dr)/2;
afisare(st,mij,2*k);
afisare(mij+1,dr,2*k+1);
}
}
int main()
{
f>>n;
build(1,n,1);
for(int i = 1; i<=n; i++){
f>>v[i];
}
for(int i =n;i>=1; i--){
num = v[i];
poz = i;
creere(1,n,1);
//afisare(1,n,1);
//g<<"\n";
}
for(int i =1; i<= n; i++){
g<<x[i]<<"\n";
}
f.close();
g.close();
return 0;
}