Pagini recente » Cod sursa (job #310334) | Cod sursa (job #2369811) | Cod sursa (job #2555287) | Cod sursa (job #2462892) | Cod sursa (job #1956380)
#include <fstream>
using namespace std;
ifstream fi("order.in");
ofstream fo("order.out");
int n, a[30001];
void Update(int x,int v)
{
for (int i=x; i <= n; i += i&-i)
a[i]+=v;
}
int Query(int x)
{
int s = 0;
for (int i=x ; i>=1; i -=i&-i) s += a[i];
return s;
}
int Search(int x)
{
int st = 1, dr = n, mij;
while (st < dr)
{
int mij = (st + dr) / 2;
int nr=Query(mij);
if ( nr < x) st = mij+1;
else dr = mij;
}
return st;
}
int main() {
fi>> n;
for (int i=1;i<= n;i++) Update(i,1);
for (int i = 1,x = 2; i <= n; i++)
{
x = (x - 1 + i) % (n - i + 1);
if (x == 0) x = n - i + 1;
int poz=Search(x);
Update(poz,-1);
fo<< poz << " ";
}
}