Pagini recente » Cod sursa (job #1783977) | Cod sursa (job #447731) | Cod sursa (job #853492) | Cod sursa (job #1731742) | Cod sursa (job #2752080)
#include <iostream>
#include <fstream>
using namespace std;
const int MAX = 30001;
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 f("schi.in");
ofstream g("schi.out");
f >> n;
for( i = 1; i <= n; i++){
f >> 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++ ){
g << sol[i] << "\n";
}
}