Pagini recente » Cod sursa (job #417963) | Cod sursa (job #1323944) | Cod sursa (job #1693646) | Clasament allyoucancode2008 | Cod sursa (job #1522253)
# include <bits/stdc++.h>
# define ub(x) (x&(-x))
using namespace std;
const int Nmax = 30000 + 5;
int n, nrc, i, poz, ind;
int aib[Nmax], sol[Nmax];
void add(int poz, int val)
{
for (int i = poz; i <= n; i += ub(i)) aib[i] += val;
}
int sum (int poz)
{
int s = 0;
for (int i = poz; i >= 1; i -= ub(i)) s += aib[i];
return s;
}
int cautbin (int x)
{
int st = 1, dr = n, mij;
int Min = INT_MAX;
while (st <= dr)
{
mij = (st + dr) / 2;
if (sum(mij) == x && mij < Min) Min = mij;
if (sum(mij) < x) st = mij + 1;
else dr = mij - 1;
}
return Min;
}
void write()
{
for (int i = 1; i <= n; ++i)
printf("%d ",sol[i]);
}
int main ()
{
freopen("order.in","r",stdin);
freopen("order.out","w",stdout);
scanf("%d\n", &n);
for (i = 1; i <= n; ++i) add(i, 1);
nrc = 2;
ind = n;
for (i = 1; i <= n; ++i)
{ ind --;
poz = cautbin(nrc);
add(poz, -1);
sol[i] = poz;
nrc += i;
if (ind) {
if ( nrc % ind == 0) nrc = ind;
else nrc = nrc % ind;
}
}
write();
return 0;
}