Pagini recente » Monitorul de evaluare | Cod sursa (job #1632068) | Cod sursa (job #2525631) | Cod sursa (job #2012900) | Cod sursa (job #227981)
Cod sursa(job #227981)
#include <fstream>
using namespace std;
ifstream fin ("order.in");
ofstream fout ("order.out");
int n,heap[300000],caut,poz[300000];
void baga(int nod, int st,int dr)
{
if (st==dr)
{
heap[nod]=1;
poz[st]=nod;
return ;
}
int mij=(st+dr)>>1;
int nst=nod<<1;
int ndr=(nod<<1)+1;
baga(nst,st,mij);
baga(ndr,mij+1,dr);
heap[nod]=heap[ndr]+heap[nst];
}
void calc(int nod,int st,int dr)
{
if (st==dr)
{
heap[nod]=0;
fout<<st<<" ";
return ;
}
int mij=(st+dr)>>1;
int nst=nod<<1;
int ndr=(nod<<1)+1;
if (caut<=heap[nst])
calc(nst,st,mij);
else
{
caut-=heap[nst];
calc(ndr,mij+1,dr);
}
heap[nod]=heap[nst]+heap[ndr];
}
int main ()
{
fin>>n;
baga(1,1,n);
int poz=2;
caut=2;
calc(1,1,n);
for (int i=2;i<=n;i++)
{
poz+=(i-1);
poz%=(n-i+1);
caut=poz;
if (caut==0)
{
caut=(n-i+1);
poz=(n-i+1);
}
// if (caut==0)
//{
// fout<<n<<"\n";
//return 0;
// }
calc(1,1,n);
}
return 0;
}