fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. ll mul(ll a, ll b, ll mod) {
  5. a %= mod;
  6. b %= mod;
  7. ll res = 0;
  8. while (b) {
  9. if (b & 1) res = (res + a) % mod;
  10. a = (a + a) % mod;
  11. b >>= 1;
  12. }
  13. return res;
  14. }
  15. const ll mod = 998244353;
  16. int a[300004];
  17. void solve(){
  18. ll n;
  19. cin >> n;
  20. for (int i = 1 ; i <= n ; i++){
  21. cin >> a[i];
  22. }
  23. ll res = 0;
  24. for (int bit = 0 ; bit < 32 ; bit++){
  25. ll parity = 0 , lensum = 0;
  26. vector<vector<ll>> parity_sum(2, vector<ll>(2, 0));
  27. parity_sum[0][0] = 0;
  28. parity_sum[0][1] = 1;
  29. parity_sum[1][0] = 0;
  30. parity_sum[1][1] = 0;
  31. for (int i = 1 ; i <= n ; i++){
  32. if ((a[i] >> bit) & 1){
  33. parity = (parity + 1) & 1;
  34. }
  35. int parity1 = !parity;
  36. ll part1 = (parity_sum[parity1][1] * i) % mod;
  37. ll part2 = parity_sum[parity1][0] % mod;
  38. lensum = (lensum + part1 - part2 + mod) % mod;
  39. if(lensum < 0) lensum += mod;
  40. parity_sum[parity][0] += i;
  41. parity_sum[parity][1] ++;
  42. }
  43. res = (res + lensum * ((1LL << bit) % mod) % mod) % mod;
  44. }
  45. cout << res %mod;
  46.  
  47. }
  48. int main(){
  49. solve();
  50. }
  51.  
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty