Pagini recente » Cod sursa (job #1656719) | Cod sursa (job #2363939) | Cod sursa (job #574928) | Cod sursa (job #1351391) | Cod sursa (job #2751452)
#include <iostream>
#include <fstream>
using namespace std;
const int MAX = 30010;
int n,i,v[MAX],A[4*MAX],sol[MAX];
void build(int nod,int st,int dr) {
if (st == dr)
A[nod] = 1;
else{
int mid = (st+dr)/2;
build(2*nod,st,mid);
build(2*nod+1,mid+1,dr);
A[nod]=A[2*nod]+A[2*nod+1];
}
}
void update(int nod,int st,int dr,int poz,int val) {
if (st == dr){
A[nod] = 0;
sol[st] = val;
}
else{
int mid = (st+dr)/2;
if( poz <= A[2*nod] )
update(2*nod,st,mid, poz,val);
else
update(2*nod+1,mid+1,dr,poz-A[2*nod],val);
A[nod]=A[2*nod]+A[2*nod+1];
}
}
int main() {
ifstream fin("schi.in");
ofstream fout("schi.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";
}
}