Cod sursa(job #3132247)

Utilizator sebimihMihalache Sebastian sebimih Data 22 mai 2023 00:57:03
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");

const int N = 30005;

int n;
int arb[4 * N], loc[N], clasament[N];

void build(int left = 1, int right = n, int node = 1)
{
	if (left == right)
	{
		arb[node] = 1;
		return;
	}

	int mid = (left + right) / 2;

	build(left, mid, node * 2);
	build(mid + 1, right, node * 2 + 1);
	arb[node] = arb[node * 2] + arb[node * 2 + 1];
}

int getPlace(int val, int left = 1, int right = n, int node = 1)
{
	arb[node]--;

	if (left == right)
	{
		return left;
	}

	int mid = (left + right) / 2;

	if (val <= arb[node * 2])
	{
		return getPlace(val, left, mid, node * 2);
	}
	else
	{
		return getPlace(val - arb[node * 2], mid + 1, right, node * 2 + 1);
	}
}

int main()
{
	fin >> n;

	for (int i = 1; i <= n; i++)
	{
		fin >> loc[i];
	}

	build();

	for (int i = n; i >= 1; i--)
	{
		clasament[getPlace(loc[i])] = i;
	}

	for (int i = 1; i <= n; i++)
	{
		fout << clasament[i] << '\n';
	}
}