要求or的值最大,从高位到低位贪心,高位尽量为0,所以要求优先满足高位每段的xor和都相等
转化为前缀和就是选出0的个数能否>=m
#includeusing namespace std;int vis[1000005];long long a[1000005],Sum[1000005];int main(){ int n,m; scanf("%d%d",&n,&m); for (int i=1; i<=n; i++){ scanf("%lld",&a[i]); Sum[i]=Sum[i-1]^a[i]; } long long ans=0; for (int i=62; i>=0; i--){ int sum=0; for (int j=1; j<=n; j++) if (!vis[j] && (Sum[j]&(1ll< =m && !(Sum[n]&(1ll<