Pagini recente » Cod sursa (job #2408073) | Cod sursa (job #1331988) | Cod sursa (job #1950451) | Cod sursa (job #3002621) | Cod sursa (job #3144168)
#include <fstream>
using namespace std;
const int Nmax = 30005;
ifstream fin("schi.in");
ofstream fout("schi.out");
int v[Nmax], sol[Nmax], aint[4 * Nmax];
void build(int nod, int st, int dr){
if(st == dr){
aint[nod] = 1;
return;
}
int mid;
mid = (st + dr) / 2;
build(2 * nod, st, mid);
build(2 * nod + 1, mid + 1, dr);
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
void update(int nod, int st, int dr, int poz, int indice){
if(st == dr){
sol[st] = indice;
aint[nod] = 0;
return;
}
int mid;
mid = (st + dr) / 2;
if(poz <= aint[2 * nod]){
update(2 * nod, st, mid, poz, indice);
}
else{
update(2 * nod + 1, mid + 1, dr, poz - aint[2 * nod], indice);
}
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
int main(){
int n;
fin >> n;
for(int i = 1; i <= n; i++){
fin >> v[i];
}
build(1, 1, n);
for(int i = n; i >= 1; i--){
update(1, 1, n, v[i], i);
}
for(int i = 1; i <= n; i++){
fout << sol[i] << '\n';
}
return 0;
}