题目大意:给定一个长度为
求出前缀异或和后从大到小按位确定,如果某一位上有至少
时间复杂度O
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 500500
using namespace std;
int n,m;
long long a[M],ans;
bool v[M];
int main()
{
int i;
long long j;
cin>>n>>m;
for(i=1;i<=n;i++)
scanf("%lld",&a[i]),a[i]^=a[i-1];
for(j=1ll<<62;j;j>>=1)
{
int cnt=0;
for(i=1;i<=n;i++)
if( !v[i] && ~a[i]&j )
++cnt;
if( cnt>=m && ~a[n]&j )
{
for(i=1;i<=n;i++)
if(a[i]&j)
v[i]=true;
}
else
ans|=j;
}
cout<<ans<<endl;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/popoqqq/article/details/47808073