Pagini recente » Cod sursa (job #69283) | Cod sursa (job #819903) | Cod sursa (job #2249911) | Cod sursa (job #789704) | Cod sursa (job #3152594)
#include <bits/stdc++.h>
using namespace std;
//ifstream fin ("order.in");
//ofstream fout ("order.out");
vector <int> bits(30005, 0);
int v[30005], ans[30005];
int n;
void update(int i, int val) {
while(i <= n) {
bits[i] += val;
i += (i&-i);
}
}
int presum(int i) {
int sum = 0;
while(i > 0) {
sum += bits[i];
i -= (i&-i);
}
return sum;
}
int cb(int l, int r, int val) {
int mid;
while(l < r) {
mid = (l+r)/2;
if(presum(mid) == val)
return mid;
if(presum(mid) > val)
r = mid-1;
else
l = mid+1;
}
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
update(i, 1);
int poz = 1;
for(int i = 1; i <= n; i++) {
int poz1 = (i + presum(poz))%(n-i+1);
if(poz1 == 0)
poz1++;
poz = cb(1, n, poz1);
cout << poz << ' ';
update(poz, -1);
}
return 0;
}