Cod sursa(job #1537640)

Utilizator tonisnakesBoar Antonio tonisnakes Data 27 noiembrie 2015 18:04:04
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("schi.in");
ofstream fout ("schi.out");

const int maxn = 30005;
int v[4*maxn], a[maxn], b[maxn];

void build (int node, int left, int right)
{
	if (left == right){
		v[node] = 1;
	}
	else {
		int middle = (left+right) / 2;
		build(node * 2, left, middle);
		build(node * 2 + 1, middle +1, right);
		v[node] = right - left + 1;
	}
}

void verif (int node, int left, int right, int poz, int x)
{
	if (left == right){
		v[node] = 0;
		b[left] = x;
	}
	else {
		int middle = (left+right) / 2;
		if (poz <= v[node * 2]){
			verif(node * 2, left, middle, poz, x);
		}
		else {
			verif(node * 2 + 1, middle + 1, right, poz - v[node * 2], x);
		}
		--v[node];
	}
}

int main ()
{
	int n;
	fin >> n;
	for (int i = 1; i <= n; ++i){
		fin >> a[i];
	}
	build(1, 1, n);
	for (int i = n; i >= 1; --i){
		verif(1, 1, n, a[i], i);
	}
	for (int i = 1; i <= n; ++i){
		fout << b[i] << '\n';
	}

	fin.close();
	fout.close();
	return 0;
}