Cod sursa(job #3369716)

Utilizator AndreiRaresAcatrini Rares Andrei AndreiRares Data 21 octombrie 2026 21:05:52
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
using namespace std;

#ifdef LOCAL
#define fin cin
#define fout cout
#else
ifstream fin("order.in");
ofstream fout("order.out");
#endif

int aint[120000];

void build(int nod, int st, int dr) {
	aint[nod] = dr - st + 1;
	if (st == dr)
		return;
	int mij = (st + dr) / 2;
	build(nod * 2, st, mij);
	build(nod * 2 + 1, mij + 1, dr);
}

void update(int nod, int st, int dr, int poz) {
	if (poz < st || poz > dr)
		return;
	if (st == dr) {
		aint[nod] = 0;
		return;
	}
	int mij = (st  + dr) / 2;
	update(nod * 2, st, mij, poz);
	update(nod * 2 + 1, mij + 1, dr, poz);
	aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
}

int query(int nod, int st, int dr, int s) {
	if (st == dr)
		return dr;
	int mij = (st + dr) / 2;
	if (aint[nod * 2] >= s)
		return query(nod * 2, st, mij, s);
	else
		return query(nod * 2 + 1, mij + 1, dr, s - aint[nod * 2]);
}

int main() {
	int n, poz=1;
	fin >> n;
	build(1, 1, n);
	for (int i=1; i<=n; i++) {
		poz = (poz + i - 1) % aint[1] + 1;
		int copil = query(1, 1, n, poz);
		fout << copil << ' ';
		update(1, 1, n, copil);
		poz--;
	}
}