Pagini recente » Cod sursa (job #2256238) | Cod sursa (job #1294154) | Cod sursa (job #1486239) | Cod sursa (job #1908090) | Cod sursa (job #968751)
Cod sursa(job #968751)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
const int N = 30005;
int n;
vector <int> a(N, 0);
void Add(int p, int v)
{
while(p <= n)
{
a[p] += v;
p += (p^(p-1)) & p;
}
}
int Sum(int p)
{
int s = 0;
while(p)
{
s += a[p];
p -= (p^(p-1)) & p;
}
return s;
}
int bs(int val)
{
int st = 0, dr = n, m, sum;
while(st <= dr)
{
m = (st+dr) >> 1;
sum = Sum(m);
if(sum == val) return m;
if(val < sum) dr = m-1;
else st = m+1;
}
}
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
Add(i, 1);
for(int i=1, p = 1; i<=n; i++)
{
p += i;
p %= (n-i+1);
if(!p) p = n-i+1;
int nr = bs(p);
Add(nr, -1);
p = Sum(nr);
fout<<nr<<' ';
}
return 0;
}