Pagini recente » Cod sursa (job #2348705) | Cod sursa (job #2179248) | Cod sursa (job #2031713) | Cod sursa (job #2348702) | Cod sursa (job #2876001)
#include <bits/stdc++.h>
using namespace std;
ifstream in("order.in");
ofstream out("order.out");
int n;
struct aint
{
int size;
vector <int> values;
int merge(int a, int b)
{
return a + b;
}
int single(int v)
{
return v;
}
void init(int n)
{
size = 1;
while(size < n)
size *= 2;
values.resize(2 * size);
}
void build(int x, int l, int r)
{
if( r - l == 1)
{
values[x] = 1;
return ;
}
int m = (l + r) / 2;
build(2 * x + 1, l, m);
build(2 * x + 2, m, r);
values[x] = merge(values[2*x + 1], values[2 * x + 2]);
}
void set(int v, int node, int l, int r)
{
if(r - l == 1)
{
values[node] = 0;
out << l << " ";
return;
}
int m = (l + r) / 2;
if(v <= values[2 * node + 1])
set(v, 2 * node + 1, l, m);
else
set(v, 2 * node + 2, m, r);
values[node] = merge(values[2*node + 1], values[2*node + 2]);
}
void set(int v)
{
set(v, 1, 1, n);
}
};
int main()
{
in >> n;
aint t;
t.init(n);
t.build(1, 1, n);
int libere = n, last = 2;
for(int i = 1; i <= n; i++)
{
last = (i + last - 1) % libere;
if(last == 0)
last = libere;
t.set(last);
libere--;
}
return 0;
}