Pagini recente » Cod sursa (job #2655074) | Cod sursa (job #2246773) | Cod sursa (job #409476) | Cod sursa (job #2267369) | Cod sursa (job #1606360)
#include <fstream>
#define NMAX 30010
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int ARB[4*NMAX],Poz,I,RS[NMAX],A[NMAX],N;
void build(int nod,int left,int right){
if(left == right){
ARB[nod] = 1;
return;
}
int mid = (left+right)/2;
if(Poz <= mid)
build(nod*2,left,mid);
else
build(nod*2+1,mid+1,right);
ARB[nod] = ARB[2*nod] + ARB[2*nod+1];
}
void update(int nod,int left,int right){
if(left == right){
ARB[nod] = 0;
RS[left] = I;
return;
}
int mid = (left+right)/2;
if(Poz <= ARB[2*nod])
update(2*nod,left,mid);
else{
Poz-=ARB[2*nod];
update(2*nod+1,mid+1,right);
}
ARB[nod] = ARB[2*nod+1] + ARB[2*nod];
}
int main(){
fin >> N;
for(int i = 1;i<=N;i++){
fin >> A[i];
Poz = i;
build(1,1,N);
}
for(I = N;I;I--){
Poz = A[I];
update(1,1,N);
}
for(int i = 1;i<=N;i++) fout << RS[i] << '\n';
return 0;
}