Pagini recente » Cod sursa (job #1258223) | Cod sursa (job #692372) | Cod sursa (job #842290) | Cod sursa (job #1818008) | Cod sursa (job #2926084)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
const int NMAX=4e5+5;
int aint[NMAX];
void build(int p,int st,int dr)
{
int mij;
if(st==dr)
{
aint[p]=1;
return ;
}
else
{
mij=(st+dr)/2;
build(2*p,st,mij);
build(2*p+1,mij+1,dr);
aint[p]=aint[2*p]+aint[2*p+1];
}
}
void update(int p,int st,int dr,int x)
{
int mij;
if(st==dr)
{
aint[p]=0;
return ;
}
else
{
mij=(st+dr)/2;
if(x<=mij)
update(2*p,st,mij,x);
else
update(2*p+1,mij+1,dr,x);
aint[p]=aint[2*p]+aint[2*p+1];
}
}
int query(int p,int st,int dr,int y)
{
int mij;
if(st==dr)
return st;
else
{
mij=(st+dr)/2;
if(aint[2*p]>=y)
return query(2*p,st,mij,y);
else
return query(2*p+1,mij+1,dr,y-aint[2*p]);
}
}
int main()
{
int n,i,j,l=1,q;
fin>>n;
build(1,1,n);
for(i=1;i<=n;i++)
{
l=(l+i)%aint[1];
if(l==0)
l=aint[1];
q=query(1,1,n,l);
update(1,1,n,q);
l--;
fout<<q<<" ";
}
return 0;
}