Pagini recente » Cod sursa (job #1458961) | Rating Antonio Grosu (antoniokrt19) | Cod sursa (job #2246390) | Cod sursa (job #1348061) | Cod sursa (job #2903351)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("order.in");
ofstream fout ("order.out");
int arb_int[400001];
void facere(int nod, int st, int dr)
{
//if (nod < st or nod > dr) return;
if (st == dr){
arb_int[nod] = 1;
return;
}
int mjl = (st + dr) / 2;
facere(2*nod, st, mjl);
facere(2*nod+1, mjl+1, dr);
arb_int[nod] = arb_int[2*nod] + arb_int[2*nod+1];
}
int cauta(int nod, int st, int dr, int poz)
{
if (st == dr) return st;
int mjl = (st + dr) / 2;
if (arb_int[2*nod] < poz) return cauta(2*nod+1, mjl+1, dr, poz-arb_int[2*nod]);
else return cauta(2*nod, st, mjl, poz);
}
void change(int nod, int st, int dr, int val)
{
if (st == dr){
arb_int[nod] = 0;
return;
}
int mjl = (st + dr) / 2;
if (val <= mjl) change(2*nod, st, mjl, val);
else change(2*nod+1, mjl+1, dr, val);
arb_int[nod] = arb_int[2*nod] + arb_int[2*nod+1];
}
int main()
{
int n;
fin>>n;
facere(1, 1, n);
int poz = 2;
for (int i = 1; i <= n; i++){
poz += i - 1;
while (poz > arb_int[1]) poz -= arb_int[1];
int copil = cauta(1, 1, n, poz);
fout<<copil<<" ";
change(1, 1, n, copil);
}
return 0;
}