Cod sursa(job #3132502)

Utilizator HandoMihnea-Vicentiu Hando Data 22 mai 2023 21:53:29
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("schi.in");
ofstream g("schi.out");

int t[120001], in[30001], poz[30001];
int N, x;

void build(int v, int tl, int tr){
	if(tl == tr) t[v] = 1;
	else{
		int tm = (tl + tr) >> 1;
		build(v << 1, tl, tm);
		build(v << 1 | 1, tm + 1, tr);
		t[v] = t[v << 1] + t[v << 1 | 1];
	}
}
int find_poz(int v, int tl, int tr, int k){
	if(tl == tr){
		t[v]--;
		return tl;
	}
	int tm = (tl + tr) >> 1;
	if(t[v << 1] >= k){
		t[v]--;
		return find_poz(v << 1, tl, tm, k);
	}
	t[v]--;
	return find_poz(v << 1 | 1, tm + 1, tr, k - t[v << 1]);
}

int main(){
	f >> N;
	build(1, 1, N);
	for(int i = 1;i <= N;i++)
		f >> in[i];
	for(int i = N;i >= 1;i--)
		poz[find_poz(1, 1, N, in[i])] = i;
	for(int i = 1;i <= N;i++)
		g << poz[i] << "\n";
}