Cod sursa(job #2751148)

Utilizator vali_27Bojici Valentin vali_27 Data 14 mai 2021 13:24:36
Problema Order Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>
#include <cmath>
 
std::ifstream f("order.in");
std::ofstream g("order.out");

int v[30001], blocks[200], block_size, n;

int main()
{
	f >> n;
	block_size = int(sqrt(n));

	for (int i = 0; i < n; ++i)
	{
		v[i] = 1;
		blocks[i / block_size]++;
	}

	int poz = 2;
	int increment = 0;

	while (n)
	{
		poz += increment;
		
		if (n == 1)
			poz = 1;
		else
		if (poz > n)
			poz %= n;

		int poz_copy = poz;

		int block_idx = 0;
		while(blocks[block_idx] < poz)
		{
			poz -= blocks[block_idx];
			block_idx++;
		}

		int i = block_idx * block_size;
		while (poz)
		{
			poz -= v[i];
			i++;
		}

		// i e mereu mai mare ca 0 dupa ce iese din while ul ala
		v[i-1] = 0; 
		blocks[(i-1) / block_size]--;
		
		g << i << ' ';

		poz = poz_copy;
		increment += 1;
		n--;
	}
}