Pagini recente » Cod sursa (job #977685) | Cod sursa (job #1760833) | Cod sursa (job #820821) | Cod sursa (job #1469659) | Cod sursa (job #3251134)
#include <fstream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int n, A[30005], l = 2;
void Add(int poz, int val)
{
for (int i = poz; i <= n; i += i & -i)
A[i] += val;
}
int Query(int poz)
{
int sum = 0;
for (int i = poz; i; i -= i & -i)
sum += A[i];
return sum;
}
int Search(int val)
{
int st = 1, dr = n, poz = 0;
while (st <= dr)
{
int m = (st + dr) / 2;
if (Query(m) >= val)
poz = m, dr = m - 1;
else
st = m + 1;
}
return poz;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i ++)
Add(i, 1);
int cn = n;
for (int i = 1; i <= n; i ++)
{
int p = Search(l);
Add(p, -1);
fout << p << ' ';
cn --;
l += i;
if (cn)
{
if (l % cn == 0)
l = cn;
else
l %= cn;
}
}
}