Pagini recente » Cod sursa (job #1321783) | Cod sursa (job #2822127) | Cod sursa (job #1370587) | Cod sursa (job #761407) | Cod sursa (job #3144157)
#include <fstream>
using namespace std;
const int Nmax = 300005;
ifstream fin("order.in");
ofstream fout("order.out");
int aint[4 * Nmax];
void build(int nod, int st, int dr){
if(st == dr){
aint[nod] = 1;
return;
}
int mid;
mid = (st + dr) / 2;
build(2 * nod, st, mid);
build(2 * nod + 1, mid + 1, dr);
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
void update(int nod, int st, int dr, int poz){
if(st == dr){
fout << st << " ";
aint[nod] = 0;
return;
}
int mid;
mid = (st + dr) / 2;
if(poz <= aint[2 * nod]){
update(2 * nod, st, mid, poz);
}
else{
update(2 * nod + 1, mid + 1, dr, poz - aint[2 * nod]);
}
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
int main(){
int n, poz, len;
fin >> n;
build(1, 1, n);
poz = 1;
len = n;
for(int i = 1; i <= n; i++){
poz += i;
if(poz > len){
poz = poz % len;
}
if(poz == 0){
poz = len;
}
update(1, 1, n, poz);
poz--;
len--;
}
return 0;
}