数据比较水,用O(n2)的方法也能过
也能用O(n)的尺缩法,只是使用尺缩法时
要把区间 [i, j]推到[i+1, j]时,要用按位把a[i]的1消掉,操作比较麻烦,不想写了
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <map>
using namespace std;
#define INF 1e9
#define maxn 100010
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define mset(x) memset(x,0,sizeof(x))
int kase, n, m;
int a[maxn];
int main(){
// freopen("a.txt","r",stdin);
// freopen(".out","w",stdout);
cin>>kase;
rep(ks, 1, kase){
cin>>n>>m;
rep(i,1,n) scanf("%d", &a[i]);
int res=0;
rep(i,1,n){
int cur = 0, j;
for(j=i; j>0; j--){
if((cur|a[j])>=m) break;
cur|=a[j];
//printf("%d\n", cur);
res++;
}
}
printf("Case #%d: %d\n", ks, res);
}
return 0;
}