Pagini recente » Cod sursa (job #306229) | Cod sursa (job #2873104) | Cod sursa (job #3241659) | Cod sursa (job #1325637) | Cod sursa (job #2527313)
#include <iostream>
#include <fstream>
using namespace std;
ifstream x("order.in");
ofstream y("order.out");
int n,m,i,pozi=2,poz,e,a[120202],val;
void update(int nod, int left, int right)
{
if(left==right)
{
a[nod]=val;
return;
}
int mij=(left+right)/2;
if(poz<=mij)
update(nod*2,left,mij);
else
update(nod*2+1,mij+1,right);
a[nod]=a[nod*2]+a[nod*2+1];
}
void query(int nod, int start, int finish, int vall)
{
if(start==finish)
{
e=start;
return;
}
int mij=(start+finish)/2;
if(a[nod*2]>=vall)
query(nod*2,start,mij,vall);
else
query(nod*2+1,mij+1,finish,vall-a[nod*2]);
}
int main()
{
x>>n;
m=n;
for(i=1;i<=n;i++)
{
poz=i;
val=1;
update(1,1,n);
}
for(i=1;i<=n;i++)
{
pozi=pozi%m;
if(!pozi)
pozi=m;
query(1,1,n,pozi);
y<<e<<" ";
poz=e;
val=0;
update(1,1,n);
pozi+=i;
m--;
}
x.close();
y.close();
return 0;
}