Pagini recente » Cod sursa (job #40306) | Cod sursa (job #1078984) | Cod sursa (job #2211150) | Cod sursa (job #3209152) | Cod sursa (job #2186901)
#include <iostream>
#include <fstream>
#define DN 30001
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int n, imp, pos, val, element, arb[4*DN], el[4*DN];
void update(int nod, int st, int dr)
{
if(st==dr)
{
arb[nod]=val;
el[nod]=1;
return ;
}
int mij=(st+dr)/2;
if(mij>=pos)
update(2*nod, st, mij);
else update(2*nod+1, mij+1, dr);
arb[nod]=max(arb[2*nod], arb[2*nod+1]);
el[nod]=el[2*nod]+el[2*nod+1];
}
void query(int nod, int st, int dr)
{
if(st==dr)
{
arb[nod]=0;
el[nod]=0;
element=st;
return;
}
int mij=(st+dr)/2;
if(element+el[2*nod]>=pos)
query(2*nod, st, mij);
else
{
element+=el[2*nod];
query(2*nod+1, mij+1, dr);
}
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
el[nod]=el[2*nod]+el[2*nod+1];
}
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
{
pos=i;
val=i;
update(1, 1, n);
}
pos=1;
imp=n;
for(int i=1; i<=n; i++)
{
pos+=i;
pos%=imp;
if(pos==0)
pos=imp;
element=0;
query(1, 1, n);
fout<<element<<" ";
pos--;
imp--;
}
return 0;
}