看到区间异或和就想起来了前缀。 前置知识:(下面的[xx,yy]代表从xx到yy的异或和) 所以有: 所以预处理出所有的前缀异或和即可,由于需要,故这里可不用map,直接sort一遍即可使得相同的值相邻,然后记录这种区间的个数。由于要在所有异或和相同的区间中选择两个区间, 贡献即:,遍历一遍即可。 又因为,故最小为0,所以从遍历是从0到n的。(all表示前缀异或和,all[0]初始化为0) #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5 + 10; int ...