Pagini recente » Cod sursa (job #2334603) | Cod sursa (job #1809985) | Cod sursa (job #2693745) | Cod sursa (job #917253) | Cod sursa (job #2147205)
#include <fstream>
#define nmax 60000*2+1
using namespace std;
int v[nmax],e[nmax];
int p,val,poz,n,sum=0;
void adauga(int nod,int st,int dr)
{
if(st==dr)
{
v[nod]=val;
e[nod]=1;
return;
}
int mij=(st+dr)/2;
if(poz<=mij)
{
adauga(nod*2,st,mij);
}
else
{
adauga(nod*2+1,mij+1,dr);
}
v[nod]=max(v[nod*2],v[nod*2+1]);
e[nod]=e[nod*2]+e[nod*2+1];
}
void intreaba(int nod,int st,int dr)
{
if(st==dr)
{
v[nod]=0;
e[nod]=0;
p=dr;
return;
}
int mij=(st+dr)/2;
if(sum+e[nod*2]>=poz)
{
intreaba(nod*2,st,mij);
}
else
{
sum+=e[nod*2];
intreaba(nod*2+1,mij+1,dr);
}
v[nod]=max(v[nod*2],v[nod*2+1]);
e[nod]=e[nod*2]+e[nod*2+1];
}
int main()
{
ifstream in("order.in");
ofstream out("order.out");
in>>n;
for(int i=1;i<=n;i++)
{
val=i;
poz=i;
adauga(1,1,n);
}
poz=1;
int pr=n;
for(int i=1;i<=n;i++)
{
poz+=i;
poz%=pr;
if(!poz)
poz=pr;
sum=0;
intreaba(1,1,n);
poz--;
out<<p<<" ";
pr--;
}
return 0;
}