Pagini recente » Cod sursa (job #2282760) | Cod sursa (job #705063) | Cod sursa (job #1095746) | Cod sursa (job #784364) | Cod sursa (job #867929)
Cod sursa(job #867929)
#include <iostream>
#include <fstream>
using namespace std;
int arb[120006],poz,pasi,x=1,nr;
ifstream f("order.in");
ofstream g("order.out");
void update(int nod,int left,int right)
{
if(left==right)
{
arb[nod]=1;
return;
}
int mij=(left+right)/2;
if(poz<=mij) update(2*nod,left,mij);
else update(2*nod+1,mij+1,right);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
void caut(int nod,int left,int right)
{
if(left==right)
{
g<<left<<" ";
arb[nod]=0;
return;
}
int mij=(left+right)/2;
if( nr<=arb[2*nod] )
caut(2*nod,left,mij);
else
{
nr-=arb[2*nod];
caut(2*nod+1,mij+1,right);
}
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
int main()
{
int n;
f>>n;
for(int i=1;i<=n;++i)
{
poz=i;
update(1,1,n);
}
for(int i=1;i<=n;++i)
{
x=(x+i)%arb[1];
if(x==0) x=arb[1];
nr=x;
caut(1,1,n);
--x;
}
return 0;
}