Cod sursa(job #2759301)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 16 iunie 2021 18:13:42
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>

auto *in = fopen("order.in", "r"), *out = fopen("order.out", "w") ;

const int maxn = 3e4 ;

int aint[1 + (maxn << 2)] ;

void build(int node, int left, int right) {
  if (left == right) {
    aint[node] = 1 ;
    return ;
  }
  int mid = ((left + right) >> 1) ;
  build(node << 1, left, mid) ;
  build((node << 1) + 1, mid + 1, right) ;
  aint[node] = aint[node << 1] + aint[(node << 1) + 1] ;
}

int query(int node, int left, int right, int position) {
  aint[node] -- ;
  if (left == right) {
    return left ;
  }
  int mid = ((left + right) >> 1), copii(aint[node << 1]) ;
  if (position <= copii) {
    return query(node << 1, left, mid, position) ;
  }
  return query((node << 1) + 1, mid + 1, right, position - copii) ;
}

int main() {
  int n ;
  fscanf(in, "%d", &n) ;
  build(1, 1, n) ;
  int badLuck = 1, ans ;
  for (int i = 1 ; i <= n ; ++ i) {
    badLuck = (badLuck + i) % aint[1] ;
    if (badLuck == 0) {
      badLuck = aint[1] ;
    }
    ans = query(1, 1, n, badLuck--) ;
    fprintf(out, "%d ", ans) ;
  }
}