Pagini recente » Cod sursa (job #1851943) | Cod sursa (job #1698354) | Cod sursa (job #2138656) | Cod sursa (job #1685231) | Cod sursa (job #3134417)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("order.in");
ofstream g("order.out");
const int NMAX = 30000;
int aib[NMAX + 1];
void adauga(int i, int n, int x) {
for (; i <= n; i += (i & -i))
aib[i] += x;
}
void afiseaza(int n)
{
int nr = 1, rezerva = n;
for (int i = 1; i <= n; i++) {
nr = ((nr + i - 1) % rezerva) + 1;
int miscare = (1 << 14), pozitie = 0, sum = 0;
while (miscare) {
if (pozitie + miscare <= n && sum + aib[pozitie + miscare] < nr) {
sum += aib[pozitie + miscare];
pozitie += miscare;
}
miscare >>= 1;
}
rezerva--;
nr--;
adauga(pozitie + 1, n, -1);
g << pozitie + 1 << " ";
}
}
int main()
{
int n;
f >> n;
for(int i = 1; i <= n; i++)
adauga(i, n, 1);
afiseaza(n);
return 0;
}