Pagini recente » Cod sursa (job #346790) | Cod sursa (job #228767) | Cod sursa (job #1854339) | Cod sursa (job #653945) | Cod sursa (job #1519646)
#include <iostream>
#include <fstream>
#include <sstream>
#define maxN 30001
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
std::stringstream buffer;
int n, poz, val;
int arb[3*maxN];
void update(int nod, int st, int dr)
{
if (st==dr)
{
arb[nod]+=val;
return;
}
int mid=(st+dr)>>1;
if (poz<=mid) update(2*nod,st,mid);
else update(2*nod+1,mid+1,dr);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
int query(int nod, int st, int dr)
{
if (st==dr) return st;
int mid=(st+dr)>>1;
if (arb[nod*2]>=val) query(nod*2,st,mid);
else {
val-=arb[nod*2];
return query(nod*2+1,mid+1,dr);
}
}
int main()
{
fin>>n;
val=1;
for (int i=1; i<=n; ++i)
{
poz=i;
update(1,1,n);
}
int pas=1;
for (int i=1; i<=n; ++i)
{
pas=(pas+i)%arb[1];
if (!pas) pas=arb[1];
val=pas;
poz=query(1,1,n);
buffer<<poz<<' ';
val=-1;
update(1,1,n);
pas--;
if (!pas) pas=arb[1];
}
fout<<buffer.str();
return 0;
}