Pagini recente » Cod sursa (job #2000424) | Cod sursa (job #1381211) | Cod sursa (job #366789) | Cod sursa (job #1922612) | Cod sursa (job #1792171)
#include <fstream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
const int MAXN = 30005;
int N;
int aib[MAXN];
int poz;
void Update( int p, int x );
int Sum( int p );
int main()
{
int i, j, st, dr, mij;
fin >> N;
for ( i = 1; i <= N; i++ )
Update(i, 1);
poz = 2;
for ( i = 1; i <= N; i++ )
{
poz = ( poz + i - 1 ) % ( N - i + 1 );
if ( poz == 0 ) poz = N - i + 1;
st = 1, dr = N;
while ( st <= dr )
{
mij = ( st + dr ) / 2;
if ( Sum(mij) >= poz )
{
if ( Sum(mij) == poz )
{
j = mij;
}
dr = mij - 1;
}
else
st = mij + 1;
}
Update(j, -1);
fout << j << ' ';
}
fin.close();
fout.close();
return 0;
}
void Update( int p, int x )
{
for ( int i = p; i <= N; i += i & -i )
aib[i] += x;
}
int Sum( int p )
{
int s = 0;
for ( int i = p; i >= 1; i -= i & -i )
s += aib[i];
return s;
}