题意:给定一个长度为n的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为0。
stragegy: 用两个vector存储异或值为i的左端点和右端点,针对每个相同的异或值,我们考虑每个左区间的右端点的右边有多少个左端点(画个图,显然),然后用二分查找答案;
#include<bits/stdc++.h>
// #include<bits/extc++.h>
#define oo INT_MAX
#define ll long long
#define maxn 10000009
#define _rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define _rev(i, a, b) for(int i = (a); i >= (b); --i)
#define _for(i, a, b) for(int i = (a); i < (b) ;++i)
#define met(a, b) memset(a, b, sizeof(a))
using namespace std;
vector<int> l[