Pagini recente » Cod sursa (job #310581) | Cod sursa (job #2551560) | Cod sursa (job #2432888) | Cod sursa (job #2593795) | Cod sursa (job #3004475)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("order.in");
ofstream cout("order.out");
int n, aib[30001];
void update(int p, int x)
{
for (int i = p; i <= n; i += i & -i)
aib[i] += x;
}
int query(int p)
{
int s = 0;
for(int i = p; i; i -= i & -i)
s += aib[i];
return s;
}
int cb(int x)
{
int s = 1, d = n, mi = 100, r;
while(s <= d)
{
int m = (s + d) >> 1;
r = query(m);
if (r == x){
mi = min(mi, m);
d = m - 1;
}
else if (r > x)
d = m - 1;
else s = m + 1;
}
return mi;
}
int main()
{
cin >> n;
for (int i = 1; i <= n; ++i)
update(i, 1);
int poz = 2, n2 = n;
for (int i = 1; i < n; i++)
{
int p = cb(poz);
update(p, -1);
cout << p << ' ';
poz += i;
n2--;
if (n2)
poz = ((poz % n2 == 0) ? n : poz % n2);
}
int p = cb(1);
cout << p << '\n';
return 0;
}