Problem p02838 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define endl "\n"
#define REP(i, a, n) for (int i = a; i < n; ++i)
#define REPR(i, a, n) for (int i = a; i > n; --i)
#define RUP(a, b) ((a + b - 1) / (b))
#define ALL(v) (v).begin(), (v).end()
#define pb push_back
#define mp make_pair
#define mt make_tuple
// #define MOD 1000000007
#define INF LLONG_MAX / 2

typedef long long ll;
typedef pair<int, int> Pii;
typedef tuple<int, int, int> Tiii;
typedef vector<int> Vi;
typedef vector<Vi> VVi;
typedef vector<Pii> VPii;
typedef vector<string> Vs;

template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> void YesNo(T a) { cout << (a ? "Yes" : "No") << endl; }
template <class T> void YESNO(T a) { cout << (a ? "YES" : "NO") << endl; }
void vin(Vi &v) { REP(i, 0, (v).size()) cin >> v[i]; }
void vin(Vi &v, Vi &v2) { REP(i, 0, (v).size()) cin >> v[i] >> v2[i]; }
void vout(Vi &v) {
  for (int i = 0; i < (v).size(); i++)
    cout << v[i] << " ";
  cout << endl;
}
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
int lcm(int a, int b) { return a / gcd(a, b) * b; }
void uniq(Vi &v) {
  sort(v.begin(), v.end());
  v.erase(unique(v.begin(), v.end()), v.end());
}
int ctoi(char c) {
  if (c >= '0' && c <= '9') {
    return c - '0';
  }
  return 0;
}
void accum(Vi &v) { REP(i, 1, (v).size()) v[i] += v[i - 1]; }
bool comp(Pii a, Pii b) {
  if (a.second != b.second)
    return a.second < b.second;
  else
    return a.first < b.first;
}

const long long MOD = 1000000007;

void solve(long long n, std::vector<long long> a) {
  int ans = 0;
  REP(i, 0, 61) {
    int checkbit = (1ll << i);
    int cnt0 = 0, cnt1 = 0;
    REP(j, 0, n) {
      if (a[j] & checkbit)
        cnt1++;
      else
        cnt0++;
    }
    //        cout<<i<<" "<<cnt0<<" "<<cnt1<<endl;
    REP(j, 0, cnt0 * cnt1) ans = (ans + checkbit) % MOD;
    //        cout<<ans<<endl;
  }
  cout << ans << endl;
}

// Generated by 1.1.6 https://github.com/kyuridenamida/atcoder-tools  (tips: You
// use the default template now. You can remove this line by using your custom
// template)
signed main() {
  long long N;
  scanf("%lld", &N);
  std::vector<long long> A(N);
  for (int i = 0; i < N; i++) {
    scanf("%lld", &A[i]);
  }
  solve(N, std::move(A));
  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define endl "\n"
#define REP(i, a, n) for (int i = a; i < n; ++i)
#define REPR(i, a, n) for (int i = a; i > n; --i)
#define RUP(a, b) ((a + b - 1) / (b))
#define ALL(v) (v).begin(), (v).end()
#define pb push_back
#define mp make_pair
#define mt make_tuple
// #define MOD 1000000007
#define INF LLONG_MAX / 2

typedef long long ll;
typedef pair<int, int> Pii;
typedef tuple<int, int, int> Tiii;
typedef vector<int> Vi;
typedef vector<Vi> VVi;
typedef vector<Pii> VPii;
typedef vector<string> Vs;

template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> void YesNo(T a) { cout << (a ? "Yes" : "No") << endl; }
template <class T> void YESNO(T a) { cout << (a ? "YES" : "NO") << endl; }
void vin(Vi &v) { REP(i, 0, (v).size()) cin >> v[i]; }
void vin(Vi &v, Vi &v2) { REP(i, 0, (v).size()) cin >> v[i] >> v2[i]; }
void vout(Vi &v) {
  for (int i = 0; i < (v).size(); i++)
    cout << v[i] << " ";
  cout << endl;
}
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
int lcm(int a, int b) { return a / gcd(a, b) * b; }
void uniq(Vi &v) {
  sort(v.begin(), v.end());
  v.erase(unique(v.begin(), v.end()), v.end());
}
int ctoi(char c) {
  if (c >= '0' && c <= '9') {
    return c - '0';
  }
  return 0;
}
void accum(Vi &v) { REP(i, 1, (v).size()) v[i] += v[i - 1]; }
bool comp(Pii a, Pii b) {
  if (a.second != b.second)
    return a.second < b.second;
  else
    return a.first < b.first;
}

const long long MOD = 1000000007;

void solve(long long n, std::vector<long long> a) {
  int ans = 0;
  REP(i, 0, 61) {
    int checkbit = (1ll << i);
    int cnt0 = 0, cnt1 = 0;
    REP(j, 0, n) {
      if (a[j] & checkbit)
        cnt1++;
      else
        cnt0++;
    }
    //        cout<<i<<" "<<cnt0<<" "<<cnt1<<endl;
    //        REP(j,0,cnt0*cnt1) ans = (ans+checkbit)%MOD;
    ans = (ans + (((cnt0 * cnt1) % MOD) * (checkbit % MOD)) % MOD) % MOD;
    //        cout<<ans<<endl;
  }
  cout << ans << endl;
}

// Generated by 1.1.6 https://github.com/kyuridenamida/atcoder-tools  (tips: You
// use the default template now. You can remove this line by using your custom
// template)
signed main() {
  long long N;
  scanf("%lld", &N);
  std::vector<long long> A(N);
  for (int i = 0; i < N; i++) {
    scanf("%lld", &A[i]);
  }
  solve(N, std::move(A));
  return 0;
}