Cod sursa(job #3155448)

Utilizator Nasa1004Ema Nicole Gheorghe Nasa1004 Data 8 octombrie 2023 13:05:39
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");

std::vector < int > aib;

void update(int pos, int val) {
	while(pos <= aib.size())
	{
		aib[pos] += val;
		pos += pos & -pos;
	}
}
int patrascu(int val) {
	int pos = 0;
	int bit = aib.size();
	while(bit & (bit - 1)) {
		bit &= bit - 1;
	}
	for (; bit; bit >>= 1) {
		if ((pos | bit) < aib.size() && aib[pos | bit] < val) {
			pos |= bit;
			val -= aib[pos];
		}
	}
	return pos + 1;
}

int main()
{
	int n, a;
	cin >> n;
	aib.resize(n);
	std::vector < int > pos(n + 1);
	for(int i = 1; i <= n; i++)
	{
		cin >> pos[i];
		update(i, 1);
	}
	std::vector < int > ans(n + 1);
	for (int i = n; i > 0; i--) {
		int cls = patrascu(pos[i]);
		ans[cls] = i;
		update(cls, -1);
	}
	for(int i = 1; i <= n; i++)
	{
		cout << ans[i] << '\n';
	}

	return 0;
}