Pagini recente » Cod sursa (job #1852069) | Cod sursa (job #126824) | Cod sursa (job #1962141) | Cod sursa (job #2420044) | Cod sursa (job #2758175)
#include <iostream>
#include <fstream>
using namespace std;
const int maxim = 30001;
int n,i,v[maxim],arb_int[4*maxim],sol[maxim];
void build(int nod,int st,int dr){
if (st == dr)
arb_int[nod] = 1;
else{
int mid = (st+dr)/2;
build(2*nod,st,mid);
build(2*nod+1,mid+1,dr);
arb_int[nod]=arb_int[2*nod]+arb_int[2*nod+1];
}
}
void update(int nod,int st,int dr,int poz,int val) {
if (st == dr){
arb_int[nod] = 0;
sol[st] = val;
}
else{
int mid = (st+dr)/2;
if( poz <= arb_int[2*nod] )
update(2*nod,st,mid, poz,val);
else
update(2*nod+1,mid+1,dr,poz-arb_int[2*nod],val);
arb_int[nod] = arb_int[2*nod] + arb_int[2*nod+1];
}
}
int main() {
ifstream fin("fisier.in");
ofstream fout("fisier.out");
fin >> n;
for( i = 1; i <= n; i++){
fin >> v[i];
}
build(1,1,n);
for ( i = n; i >= 1; i-- ){
update(1,1,n,v[i],i);
}
for ( i = 1; i <= n; i++ ){
fout << sol[i] << "\n";
}
}