Advertisement
Rishav_hitk_cse

xor triplet

Mar 19th, 2021
551
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.71 KB | None | 0 0
  1. #include <functional>
  2. #include <numeric>
  3. const int mod = 1e9+7;
  4. long long add(long long a,long long b){return (a+b)%mod;}
  5. long long mul(long long a,long long b){return (a*b)%mod;}
  6. long long sub(long long a,long long b){return (a-b+mod)%mod;}
  7. int Solution::solve(vector<int> &a) {
  8.     const int n = a.size();
  9.     vector<long long> pref(n+1);
  10.     partial_sum(a.begin(),a.end(),pref.begin()+1,bit_xor<long long>());
  11.     map<int,vector<int>> mp;
  12.     long long ans = 0;
  13.     for(int i=0;i<=n;i++)
  14.         mp[pref[i]].push_back(i);
  15.        
  16.     for(auto &p:mp){
  17.         auto &v = p.second;
  18.         int cnt = 0,sum_so_far = 0;
  19.         for(int x:v){
  20.             ans = add(ans,sub(mul(cnt,x),add(sum_so_far,cnt)));
  21.             cnt++;
  22.             sum_so_far+=x;
  23.         }
  24.     }
  25.     return ans;
  26. }
  27.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement