題意
有序列 \(s(n \leq 10^5, s_i \leq 10^6)\), 問區間 \([l, r]\) 內滿足每個數出現偶數次的子區間個數。
轉化想到區間出現每個數偶數次,那麼異或和一定為 0。
但是異或和為 0 的區間每個數不一定出現偶數個。
於是對相同的值賦乙個 \([0, 2^)\) 內隨機的值。
這樣出現衝突的概率很低。
莫隊剩下問題轉化為字首異或,找相同異或值的數即可。
**
#includeusing namespace std;
using ll = long long;
const int maxn = 1000010;
const int inf = 0x7fffffff;
const int mod = 1000000007;
template void read(t &x)
int n, m, len;
int a[maxn], cnt[maxn];
ll mp[maxn], xor[maxn], b[maxn];
struct ques q[maxn];
int ans[maxn], belong[maxn];
int main()
b[++ len] = 0;
a[0] = 1;
sort(b + 1, b + len + 1);
len = unique(b + 1, b + len + 1) - b - 1;
for (int i = 1; i <= n; i ++)
a[i] = lower_bound(b + 1, b + len + 1, xor[i]) - b;
cin >> m;
for (int i = 1; i <= m; i ++)
cin >> q[i].l >> q[i].r, q[i].l --, q[i].id = i;
sort (q + 1, q + m + 1, (ques x, ques y) );
int l = 0, r = -1, sum = 0;
for (int i = 1; i <= m; i ++)
for (int i = 1; i <= m; i ++)
cout << ans[i] << endl;
return 0;
}