Pagini recente » Cod sursa (job #3195032) | Cod sursa (job #2465993) | Cod sursa (job #1653527) | Cod sursa (job #1128715) | Cod sursa (job #3004479)
#include <fstream>
#include <vector>
#include <climits>
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 = INT_MAX, 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;
}