Cod sursa(job #2845416)

Utilizator TeodorMarciucMarciuc Teodor TeodorMarciuc Data 7 februarie 2022 19:48:29
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<iostream>
#include<fstream>
using namespace std;
int n, m, i, j,aib[200005],v[200005],ans[200005];
void update(int pos,int val){
	while (pos <= n) {
		aib[pos] += val;
		pos += pos & (-pos);
	}
}
int querry(int pos) {
	int ans = 0;
	while (pos > 0) {
		ans += aib[pos];
		pos -= pos & (-pos);
	}
	return ans;
}
int cautarebinara(int elem) {
	int st = 1, dr = n;
	while (st <= dr) {
		int mij = (st + dr) / 2;
		if (querry(mij) < elem) st = mij + 1;
		else dr = mij - 1;
	}
	return st;
}
int main() {
	ifstream cin("schi.in");
	ofstream cout("schi.out");
	cin >> n;
	for (i = 1;i <= n;i++) {
		cin >> v[i];
		update(i, 1);
	}
	for (i = n;i >= 1;i--)
	{
		int l = cautarebinara(v[i]);
		ans[l] = i;
		update(l, -1);
	}
	for (i = 1;i <= n;i++)
		cout << ans[i] << '\n';
}