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

#include <bits/stdc++.h>
using namespace std;
#define lli long long int
#define rep(i, n) for (lli i = 0; i < n; i++)
#define repb(i, n) for (lli i = n - 1; i >= 0; i--)
#define pb push_back
#define mp make_pair
#define bg() begin()
#define en() end()
#define ft first
#define sc second
#define vect_lli_it vector<lli>::iterator
#define set_lli_it set<lli>::iterator
#define inf 1e18
#define all(X) X.begin(), X.end()
#define iterate(X) for (it = X.begin(); it != X.end(); it++)
#define pii pair<lli, lli>
#define vi vector<lli>
lli combi(lli n, lli k) {
  lli ans = 1;
  k = k > n - k ? n - k : k;
  lli j = 1;
  for (; j <= k; j++, n--) {
    if (n % j == 0) {
      ans *= n / j;
    } else if (ans % j == 0) {
      ans = ans / j * n;
    } else {
      ans = (ans * n) / j;
    }
  }
  return ans;
}
lli gcd(lli a, lli b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}
lli findlcm(vector<lli> arr, lli n) {
  lli ans = arr[0];
  for (lli i = 1; i < n; i++)
    ans = (((arr[i] * ans)) / (gcd(arr[i], ans)));

  return ans;
}
lli power(lli x, lli y, lli p) {
  lli res = 1;
  x = x % p;
  if (y == 0)
    return 1 % p;
  if (x == 0)
    return 0;
  while (y > 0) {
    if (y & 1)
      res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
lli gcdExtended(lli a, lli b, lli *x, lli *y);
lli modInverse(lli b, lli m) {
  lli x, y;
  lli g = gcdExtended(b, m, &x, &y);
  if (g != 1)
    return -1;
  return (x % m + m) % m;
}
lli modDivide(lli a, lli b, lli m) {
  a = a % m;
  lli inv = modInverse(b, m);
  return (inv * a) % m;
}
lli gcdExtended(lli a, lli b, lli *x, lli *y) {
  if (a == 0) {
    *x = 0, *y = 1;
    return b;
  }
  lli x1, y1;
  lli gcd = gcdExtended(b % a, a, &x1, &y1);
  *x = y1 - (b / a) * x1;
  *y = x1;
  return gcd;
}
lli solve(lli cur) {
  lli ans = 0;
  while (cur > 0) {
    ans++;
    lli cnt = 0;
    for (lli i = 0; i < 19; i++) {
      if ((cur & (1 << i)) == (1 << i))
        cnt++;
    }
    // cout<<cur<<" "<<cnt<<"\\n";
    cur = cur % cnt;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  lli n;
  cin >> n;
  string s;
  cin >> s;
  lli tot = 0;
  rep(i, (lli)s.length()) {
    if (s[i] == '1')
      tot++;
  }
  // cout<<tot<<" ";
  lli valm = 0;
  lli modm = tot + 1;
  // cout<<modm<<"\\n";
  for (lli i = n - 1; i >= 0; i--) {
    if (s[i] == '1') {
      valm = (valm + power(2, n - 1 - i, modm)) % modm;
    }
  }
  // cout<<valm<<"\\n";
  lli vall = 0;
  lli modl = tot - 1;
  if (modl > 0) {
    for (lli i = n - 1; i >= 0; i--) {
      if (s[i] == '1')
        vall = (vall + power(2, n - 1 - i, modl)) % modl;
    }
  }
  // cout<<vall<<" "<<valm<<"\\n";
  rep(i, n) {
    lli cur;
    if (s[i] == '1') {
      cur = vall;
      if (modl > 0) {
        cur = ((cur - power(2, n - i - 1, modl)) % modl + modl) % modl;
      } else {
        cout << "0\\n";
        continue;
      }
    } else {
      cur = valm;
      cur = (cur + power(2, n - i - 1, modm)) % modm;
    }
    // cout<<cur<<" ";
    lli ans = solve(cur);
    cout << ans + 1 << "\\n";
    // cout<<cur<<" ";
  }
  return 0;
}


Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define lli long long int
#define rep(i, n) for (lli i = 0; i < n; i++)
#define repb(i, n) for (lli i = n - 1; i >= 0; i--)
#define pb push_back
#define mp make_pair
#define bg() begin()
#define en() end()
#define ft first
#define sc second
#define vect_lli_it vector<lli>::iterator
#define set_lli_it set<lli>::iterator
#define inf 1e18
#define all(X) X.begin(), X.end()
#define iterate(X) for (it = X.begin(); it != X.end(); it++)
#define pii pair<lli, lli>
#define vi vector<lli>
lli combi(lli n, lli k) {
  lli ans = 1;
  k = k > n - k ? n - k : k;
  lli j = 1;
  for (; j <= k; j++, n--) {
    if (n % j == 0) {
      ans *= n / j;
    } else if (ans % j == 0) {
      ans = ans / j * n;
    } else {
      ans = (ans * n) / j;
    }
  }
  return ans;
}
lli gcd(lli a, lli b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}
lli findlcm(vector<lli> arr, lli n) {
  lli ans = arr[0];
  for (lli i = 1; i < n; i++)
    ans = (((arr[i] * ans)) / (gcd(arr[i], ans)));

  return ans;
}
lli power(lli x, lli y, lli p) {
  lli res = 1;
  x = x % p;
  if (x == 0)
    return 0;
  while (y > 0) {
    if (y & 1)
      res = ((res * x) % p + p) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
lli gcdExtended(lli a, lli b, lli *x, lli *y);
lli modInverse(lli b, lli m) {
  lli x, y;
  lli g = gcdExtended(b, m, &x, &y);
  if (g != 1)
    return -1;
  return (x % m + m) % m;
}
lli modDivide(lli a, lli b, lli m) {
  a = a % m;
  lli inv = modInverse(b, m);
  return (inv * a) % m;
}
lli gcdExtended(lli a, lli b, lli *x, lli *y) {
  if (a == 0) {
    *x = 0, *y = 1;
    return b;
  }
  lli x1, y1;
  lli gcd = gcdExtended(b % a, a, &x1, &y1);
  *x = y1 - (b / a) * x1;
  *y = x1;
  return gcd;
}
lli solve(lli cur) {
  lli ans = 0;
  while (cur > 0) {
    ans++;
    lli cnt = 0;
    for (lli i = 0; i < 19; i++) {
      if ((cur & (1 << i)) == (1 << i))
        cnt++;
    }
    // cout<<cur<<" "<<cnt<<"\\n";
    cur = cur % cnt;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  lli n;
  cin >> n;
  string s;
  cin >> s;
  lli tot = 0;
  rep(i, (lli)s.length()) {
    if (s[i] == '1')
      tot++;
  }
  // cout<<tot<<" ";
  lli valm = 0;
  lli modm = tot + 1;
  for (lli i = n - 1; i >= 0; i--) {
    if (s[i] == '1')
      valm = (valm + power(2, n - 1 - i, modm)) % modm;
  }
  lli vall = 0;
  lli modl = tot - 1;
  for (lli i = n - 1; i >= 0; i--) {
    if (s[i] == '1')
      vall = (vall + power(2, n - 1 - i, modl)) % modl;
  }
  // cout<<vall<<" "<<valm<<"\\n";
  rep(i, n) {
    lli cur;
    if (s[i] == '1') {
      cur = vall;
      cur = ((cur - power(2, n - i - 1, modl)) % modl + modl) % modl;
    } else {
      cur = valm;
      cur = (cur + power(2, n - i - 1, modm)) % modm;
    }
    // cout<<cur<<" ";
    lli ans = solve(cur);
    cout << ans + 1 << "\\n";
  }
  return 0;
}