Cod sursa(job #2422544)

Utilizator lucametehauDart Monkey lucametehau Data 19 mai 2019 08:52:06
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

using namespace std;

ifstream cin ("order.in");
ofstream cout ("order.out");

int n;

int aint[120005];

void build(int nod, int l, int r) {
  if(l > r || l > n || r > n)
    return;
  if(l == r) {
    aint[nod] = 1;
    return;
  }
  int mid = (l + r) >> 1;
  build(2 * nod, l, mid);
  build(2 * nod + 1, mid + 1, r);
  aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}

void query(int nod, int l, int r, int value) {
  if(l > r || l > n || r > n)
    return;
  if(l == r) {
    cout << l << " ";
    aint[nod] = 0;
    return;
  }
  int mid = (l + r) >> 1;
  if(aint[2 * nod] >= value)
    query(2 * nod, l, mid, value);
  else
    query(2 * nod + 1, mid + 1, r, value - aint[2 * nod]);
  aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}

int main() {
  cin >> n;
  build(1, 1, n);
  int poz = 2, rem = n;
  for(int i = 1; i <= n; i++) {
    query(1, 1, n, poz);
    rem--;
    if(rem) {
      poz = (poz + i) % rem;
      if(!poz)
        poz = rem;
    }
  }
  return 0;
}