Beingamanforever

XOR SUM 4, Contributuion Technique

Jan 19th, 2025
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define all(x) (x).begin(), (x).end()
  5. typedef vector<int> vi;
  6. typedef vector<vi> vvi;
  7. typedef vector<pair<int, int>> vpi;
  8. typedef pair<int, int> pi;
  9. #define f first
  10. #define s second
  11. #define pb push_back
  12. #define endl "\n"
  13. #define yes cout << "YES" << endl
  14. #define no cout << "NO" << endl
  15. #define init(x, a) memset(x, a, sizeof(x))
  16. const int mod1 = 1e9 + 7, mod2 = 998244353, INF = 2e18, N = 2e5 + 5, L = 19;
  17. int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
  18. // -----------------------------------------------------------------------------
  19. int modadd(int a, int b, int mod = (1e9 + 7))
  20. {
  21.     return ((a % mod) + (b % mod)) % mod;
  22. }
  23. int modmul(int a, int b, int mod = (1e9 + 7))
  24. {
  25.     return ((a % mod) * (b % mod)) % mod;
  26. }
  27. int modsub(int a, int b, int mod = (1e9 + 7))
  28. {
  29.     return ((a % mod) - (b % mod) + mod) % mod;
  30. }
  31. int binpow(int a, int b, int mod = (1e9 + 7))
  32. {
  33.     int res = 1;
  34.     while (b > 0)
  35.     {
  36.         if (b & 1)
  37.         {
  38.             res = (res * a) % mod;
  39.         }
  40.         a = (a * a) % mod;
  41.         b >>= 1;
  42.     }
  43.     return res;
  44. }
  45. int modinv(int a, int mod = (1e9 + 7))
  46. {
  47.     return binpow(a, mod - 2, mod);
  48. }
  49. void solve()
  50. {
  51.     int n;
  52.     cin >> n;
  53.     vi a(n);
  54.     for (int i = 0; i < n; i++)
  55.     {
  56.         cin >> a[i];
  57.     }
  58.     int sum = 0;
  59.     for (int b = 0; b < 61; b++)
  60.     {
  61.         vi cnt(2, 0);
  62.         // cnt[0] = 1;
  63.         int pref = 0, curr = 0;
  64.         for (int i = 0; i < n; i++)
  65.         {
  66.             int bit = (a[i] >> b) & 1;
  67.             pref ^= bit;
  68.             curr = modadd(curr, cnt[bit ^ 1]);
  69.             cnt[bit] = modadd(cnt[bit], 1);
  70.         }
  71.         int temp = modmul(curr, 1LL << b);
  72.         sum = modadd(temp, sum);
  73.     }
  74.     cout << sum << endl;
  75.     return;
  76. }
  77.  
  78. signed main()
  79. {
  80.     // __START__;
  81.     ios_base::sync_with_stdio(false);
  82.     cin.tie(NULL);
  83.     cout.tie(NULL);
  84.     int t = 1;
  85.     // cin >> t;
  86.     while (t--)
  87.     {
  88.         solve();
  89.     }
  90.     // __END__;
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment