Pagini recente » Cod sursa (job #723987) | Cod sursa (job #2220660) | Cod sursa (job #1793808) | Cod sursa (job #2855099) | Cod sursa (job #2129618)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int n,i,p,nod1,q,n1;
bool f[32000];
struct elem{int val,ct;}v[70000];
void Remove(int nod,int V)
{//cout<<nod<<" "<<v[nod].ct<<"\n";
if(v[nod].val!=0){fout<<v[nod].val<<" ";
f[v[nod].val]=1;
v[nod].ct=0;
v[nod].val=0;
//v[nod/2].val=max(v[(nod/2)*2].val,v[(nod/2)*2+1].val);
nod1=nod;
while(nod1!=1)
{nod1=nod1/2;
v[nod1].ct--;
//v[nod1].val=v[]
}
}
else {if(v[nod*2].ct<V)Remove(nod*2+1,V-v[nod*2].ct);
else Remove(nod*2,V);
}
}
int main()
{fin>>n;
p=1;
while(p<n)
p*=2;
for(i=p;i<=p+n-1;i++)
{v[i].val=i-p+1;
v[i].ct=1;
}
for(i=p-1;i>=1;i--)
v[i].ct=v[i*2].ct+v[i*2+1].ct;
//for(i=1;i<=2*p-1;i++)
// fout<<v[i].ct<<" ";
q=1;n1=n;
for(i=1;i<=n-1;i++)
{q=q+i;
if(q>n1)q=q%n1;
if(q==0)q=n1;
Remove(1,q);
//fout<<q<<"\n";
n1--;q--;
}
for(i=1;i<=n;i++)
if(f[i]==0)fout<<i<<" ";
//fout<<v[1].val<<" ";
}