Pagini recente » Cod sursa (job #3352089) | Cod sursa (job #3336075) | Cod sursa (job #3334089) | Cod sursa (job #3334263) | Cod sursa (job #3337359)
#include <bits/stdc++.h>
using namespace std;
#define USE_STD_IO 0
#if USE_STD_IO
#define fin cin
#define fout cout
#else
ifstream fin("order.in");
ofstream fout("order.out");
#endif
int n, i, elv[30002], poz, m;
static inline void Update(int aib[], int poz, int val) {
poz++;
while(poz <= n) {
aib[poz] += val;
poz += (poz & -poz);
}
}
static inline int Query(int aib[], int poz) {
int sum = 0;
poz++;
while(poz >= 1) {
sum += aib[poz];
poz -= (poz & -poz);
}
return sum;
}
static inline int CautBin(int val) {
int st = 1, dr = n;
int poz = dr;
int mij;
while(st <= dr) {
mij = st + (dr - st) / 2;
if(val <= Query(elv, mij - 1)) {
poz = mij;
dr = mij - 1;
}
else st = mij + 1;
}
return poz;
}
int main() {
if(USE_STD_IO) ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
fin >> n;
m = n;
poz = 2;
for(i = 0; i < n; i++) Update(elv, i, 1);
for(i = 1; i <= n; i++) {
poz = (poz + i - 1) % m;
poz = (0 == poz ? m : poz);
int del = CautBin(poz);
Update(elv, del - 1, -1);
m--;
fout << del << " ";
}
return 0;
}