Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <functional>
- #include <numeric>
- const int mod = 1e9+7;
- long long add(long long a,long long b){return (a+b)%mod;}
- long long mul(long long a,long long b){return (a*b)%mod;}
- long long sub(long long a,long long b){return (a-b+mod)%mod;}
- int Solution::solve(vector<int> &a) {
- const int n = a.size();
- vector<long long> pref(n+1);
- partial_sum(a.begin(),a.end(),pref.begin()+1,bit_xor<long long>());
- map<int,vector<int>> mp;
- long long ans = 0;
- for(int i=0;i<=n;i++)
- mp[pref[i]].push_back(i);
- for(auto &p:mp){
- auto &v = p.second;
- int cnt = 0,sum_so_far = 0;
- for(int x:v){
- ans = add(ans,sub(mul(cnt,x),add(sum_so_far,cnt)));
- cnt++;
- sum_so_far+=x;
- }
- }
- return ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement