Problem p02609 (C++) — buggy submission, verdict: Runtime Error

#define __mode_debug__
/*   ξ
     ll
   ＿ll＿
 ／  ∞  ＼
│*  Ａ  *│
│*  Ｃ  *│
│*  祈  *│
│*  願  *│
│*      *│
 ￣￣￣￣￣    */
// C++14 (GCC 5.4.1)
#include <bits/stdc++.h>
using namespace std;
#ifdef __mode_debug__
#define DBG
#else
#define DBG if (false)
#endif

#define LLINF (1LL << 60)
using ll = long long;
#define mod 1000000007

#define whole(a) (a).begin(), (a).end()
#define rwhole(a) (a).rbegin(), (a).rend()

#define repd(i, a, b) for (ll i = (a); i < (b); i++)
#define rep(i, n) repd(i, 0, n)
#define rrepd(i, a, b) for (ll i = (a); i >= (b); i--)
#define each(itr, ds) for (auto itr = (ds).begin(); itr != (ds).end(); itr++)

template <typename T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}

template <typename T> inline string toString(const T &a) {
  ostringstream oss;
  oss << a;
  return oss.str();
}

// DUMP
//   ostream vector<T> , vector<vector<T>> , set<T> ,queue<T> ,
//   priority_queue<T> , pair<T,U> , map<T,U>
template <class T> ostream &operator<<(ostream &os, vector<T> &vec) {
  os << "{ ";
  rep(i, vec.size()) os << ((i == 0) ? "" : ", ") << i << ":" << vec[i];
  os << " }";
  return os;
}
template <class T> ostream &operator<<(ostream &os, vector<vector<T>> &vec) {
  os << "{" << endl;
  rep(i, vec.size()) os << "\\t   " << i << ":" << vec[i]
                        << ((i == vec.size() - 1) ? "" : ",") << endl;
  os << "\\t }";
  return os;
}
template <class T> ostream &operator<<(ostream &os, set<T> &p) {
  os << "{ ";
  each(itr, p) os << ((itr == p.begin()) ? "" : ", ") << *itr;
  os << " }";
  return os;
}
template <class T> ostream &operator<<(ostream &os, queue<T> &p) {
  queue<T> q(p);
  os << "[< " << (q.empty() ? " <]" : "");
  while (!q.empty()) {
    os << q.front();
    q.pop();
    os << (q.empty() ? " <]" : ", ");
  }
  return os;
}
template <class T> ostream &operator<<(ostream &os, priority_queue<T> &p) {
  priority_queue<T> q(p);
  os << "[< " << (q.empty() ? " <]" : "");
  while (!q.empty()) {
    os << q.top();
    q.pop();
    os << (q.empty() ? " <]" : ", ");
  }
  return os;
}
template <class T, class U> ostream &operator<<(ostream &os, pair<T, U> &p) {
  os << "(" << p.first << "," << p.second << ")";
  return os;
}
template <class T, class U> ostream &operator<<(ostream &os, map<T, U> &p) {
  os << "{ ";
  each(itr, p) os << ((itr == p.begin()) ? "" : ", ") << itr->first << ":"
                  << itr->second;
  os << " }";
  return os;
}
void dump_f(string &nm, char t) { cerr << endl; }
template <class T, class... Ts>
void dump_f(string &nm, char t, T &&x, Ts &&...ts) {
  int l = nm.find_first_of(',');
  string name(nm, 0, l), nx(nm, l + 1, -1);
  if (t == '\\n')
    cerr << "  " << name << "\\t: " << x << t;
  else
    cerr << name << ": " << x << "," << t;
  dump_f(nx, t, forward<Ts>(ts)...);
}
template <class... Ts> void dump_m(int &&ln, string &&nm, char t, Ts &&...ts) {
  cerr << "[ln: " << ln << "]" << t;
  dump_f(nm, t, forward<Ts>(ts)...);
}
#define dump(...) DBG dump_m(__LINE__, #__VA_ARGS__, '\\n', __VA_ARGS__)
#define dl(...) DBG dump_m(__LINE__, #__VA_ARGS__, '\\t', __VA_ARGS__)

#define lower_bound_idx(V, c) distance(V.begin(), lower_bound(whole(V), c))

vector<ll> f(200010, -1);
ll fx(ll t) {
  if (f[t] != -1)
    return f[t];
  ll x = t % __builtin_popcountll(t);
  f[t] = fx(x) + 1;
  return f[t];
}

int main() {
  ios::sync_with_stdio(false); // printf<=>cout
  cin.tie(nullptr);            // cin<=>cout

  ll N;
  cin >> N;
  string X;
  cin >> X;
  f[0] = 0;

  //-----------------------------------
  ll posi = 0;
  rep(i, N) if (X[i] == '1') posi++;
  ll rmp = 0, rmm = 0;
  ll tp = 1, tm = 1;
  rrepd(i, N - 1, 0) {
    if (X[i] == '1') {
      rmp += tp;
      rmp %= posi + 1;
      if (posi > 1) {
        rmm += tm;
        rmm %= posi - 1;
      }
    }
    tp *= 2;
    tp %= posi + 1;
    if (posi > 1) {
      tm *= 2;
      tm %= posi - 1;
    }
  }
  // dl(rmp,rmm,posi);
  vector<ll> ans(N);
  // dl(posi);
  tp = 1;
  tm = 1;
  rrepd(i, N - 1, 0) {
    if (X[i] == '1') {
      if (posi == 1) {
        ans[i] = 0;
      } else {
        ll r = rmm - tm;
        while (r < 0)
          r += posi - 1;
        // dl(r , fx(r));
        ans[i] = fx(r) + 1;
      }
    } else {
      ll r = rmp + tp;
      r %= posi + 1;
      // dl(r);
      // dl(r , fx(r));
      ans[i] = fx(r) + 1;
    }

    tp *= 2;
    tp %= posi + 1;
    if (posi > 1) {
      tm *= 2;
      tm %= posi - 1;
    }
  }
  rep(i, N) { cout << ans[i] << '\\n'; }

  return (0);
}

Error: 0

Fixed submission:

#define __mode_debug__
/*   ξ
     ll
   ＿ll＿
 ／  ∞  ＼
│*  Ａ  *│
│*  Ｃ  *│
│*  祈  *│
│*  願  *│
│*      *│
 ￣￣￣￣￣    */
// C++14 (GCC 5.4.1)
#include <bits/stdc++.h>
using namespace std;
#ifdef __mode_debug__
#define DBG
#else
#define DBG if (false)
#endif

#define LLINF (1LL << 60)
using ll = long long;
#define mod 1000000007

#define whole(a) (a).begin(), (a).end()
#define rwhole(a) (a).rbegin(), (a).rend()

#define repd(i, a, b) for (ll i = (a); i < (b); i++)
#define rep(i, n) repd(i, 0, n)
#define rrepd(i, a, b) for (ll i = (a); i >= (b); i--)
#define each(itr, ds) for (auto itr = (ds).begin(); itr != (ds).end(); itr++)

template <typename T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}

template <typename T> inline string toString(const T &a) {
  ostringstream oss;
  oss << a;
  return oss.str();
}

// DUMP
//   ostream vector<T> , vector<vector<T>> , set<T> ,queue<T> ,
//   priority_queue<T> , pair<T,U> , map<T,U>
template <class T> ostream &operator<<(ostream &os, vector<T> &vec) {
  os << "{ ";
  rep(i, vec.size()) os << ((i == 0) ? "" : ", ") << i << ":" << vec[i];
  os << " }";
  return os;
}
template <class T> ostream &operator<<(ostream &os, vector<vector<T>> &vec) {
  os << "{" << endl;
  rep(i, vec.size()) os << "\\t   " << i << ":" << vec[i]
                        << ((i == vec.size() - 1) ? "" : ",") << endl;
  os << "\\t }";
  return os;
}
template <class T> ostream &operator<<(ostream &os, set<T> &p) {
  os << "{ ";
  each(itr, p) os << ((itr == p.begin()) ? "" : ", ") << *itr;
  os << " }";
  return os;
}
template <class T> ostream &operator<<(ostream &os, queue<T> &p) {
  queue<T> q(p);
  os << "[< " << (q.empty() ? " <]" : "");
  while (!q.empty()) {
    os << q.front();
    q.pop();
    os << (q.empty() ? " <]" : ", ");
  }
  return os;
}
template <class T> ostream &operator<<(ostream &os, priority_queue<T> &p) {
  priority_queue<T> q(p);
  os << "[< " << (q.empty() ? " <]" : "");
  while (!q.empty()) {
    os << q.top();
    q.pop();
    os << (q.empty() ? " <]" : ", ");
  }
  return os;
}
template <class T, class U> ostream &operator<<(ostream &os, pair<T, U> &p) {
  os << "(" << p.first << "," << p.second << ")";
  return os;
}
template <class T, class U> ostream &operator<<(ostream &os, map<T, U> &p) {
  os << "{ ";
  each(itr, p) os << ((itr == p.begin()) ? "" : ", ") << itr->first << ":"
                  << itr->second;
  os << " }";
  return os;
}
void dump_f(string &nm, char t) { cerr << endl; }
template <class T, class... Ts>
void dump_f(string &nm, char t, T &&x, Ts &&...ts) {
  int l = nm.find_first_of(',');
  string name(nm, 0, l), nx(nm, l + 1, -1);
  if (t == '\\n')
    cerr << "  " << name << "\\t: " << x << t;
  else
    cerr << name << ": " << x << "," << t;
  dump_f(nx, t, forward<Ts>(ts)...);
}
template <class... Ts> void dump_m(int &&ln, string &&nm, char t, Ts &&...ts) {
  cerr << "[ln: " << ln << "]" << t;
  dump_f(nm, t, forward<Ts>(ts)...);
}
#define dump(...) DBG dump_m(__LINE__, #__VA_ARGS__, '\\n', __VA_ARGS__)
#define dl(...) DBG dump_m(__LINE__, #__VA_ARGS__, '\\t', __VA_ARGS__)

#define lower_bound_idx(V, c) distance(V.begin(), lower_bound(whole(V), c))

vector<ll> f(200010, -1);
ll fx(ll t) {
  if (f[t] != -1)
    return f[t];
  ll x = t % __builtin_popcountll(t);
  f[t] = fx(x) + 1;
  return f[t];
}

int main() {
  ios::sync_with_stdio(false); // printf<=>cout
  cin.tie(nullptr);            // cin<=>cout

  ll N;
  cin >> N;
  string X;
  cin >> X;
  f[0] = 0;

  //-----------------------------------
  ll posi = 0;
  rep(i, N) if (X[i] == '1') posi++;
  ll rmp = 0, rmm = 0;
  ll tp = 1, tm = 1;
  rrepd(i, N - 1, 0) {
    if (X[i] == '1') {
      rmp += tp;
      rmp %= posi + 1;
      if (posi != 0) {
        rmm += tm;
        rmm %= posi - 1;
      }
    }
    tp *= 2;
    tp %= posi + 1;
    if (posi != 0) {
      tm *= 2;
      tm %= posi - 1;
    }
  }
  // dl(rmp,rmm,posi);
  vector<ll> ans(N);
  tp = 1;
  tm = 1;
  rrepd(i, N - 1, 0) {
    if (X[i] == '1') {
      ll r = rmm - tm;
      while (r < 0)
        r += posi - 1;
      // dl(r , fx(r));
      ans[i] = fx(r) + 1;
    } else {
      ll r = rmp + tp;
      r %= posi + 1;
      // dl(r , fx(r));
      ans[i] = fx(r) + 1;
    }

    tp *= 2;
    tp %= posi + 1;
    tm *= 2;
    tm %= posi - 1;
  }
  rep(i, N) { cout << ans[i] << '\\n'; }

  return (0);
}