Pagini recente » Cod sursa (job #577989) | Cod sursa (job #1080209) | Cod sursa (job #1793132) | Cod sursa (job #260482) | Cod sursa (job #3134347)
#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;
}