Pagini recente » Rating UAIC oricare (UAIC_oricare) | Cod sursa (job #15321) | Cod sursa (job #620345) | Cod sursa (job #1285176) | Cod sursa (job #2751156)
#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
while (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--;
}
}