Cod sursa(job #1606360)

Utilizator valentin50517Vozian Valentin valentin50517 Data 20 februarie 2016 10:31:09
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#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;
}