//给一串序列,问有多少对[i,j]使得
//[i,j]区间的全部数的或的值小于m
//能够知道'或'操作的加(a|b)>=max(a,b)
//能够枚举区间的右边r,找左边第一个不满足的位置
//然后在它们中间的r为由边界的区间都没满足
//对于找第一个不满足的位置,能够用线段树做,
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 100010 ;
#define left v << 1
#define right v<<1|1
struct node
{
int l , r ;
int value ;
}tree[maxn<<2] ;
int h[maxn] ;
int m ,n;
void build(int l , int r , int v)
{
tree[v].l = l ;
tree[v].r = r ;
if(l == r)
{
tree[v].value = h[l] ;
return ;
}
int mid = (l + r) >> 1 ;
build(l , mid , left) ;
build(mid + 1 , r , right) ;
tree[v].value = tree[left].value|tree[right].value ;
}
int get_ans(int v , int sum)
{
if(tree[v].l == tree[v].r)
return tree[v].l ;
int mid = (tree[v].l + tree[v].r) >> 1 ;
if((sum|tree[right].value) >= m)
return get_ans(right , sum) ;
else return get_ans(left , sum|tree[right].value) ;
}
int ans = 0 ;
int query(int v , int pos)
{
if(tree[v].l == tree[v].r)
return tree[v].value ;
int mid = (tree[v].l + tree[v].r) >> 1 ;
int sum ;
if(pos <= mid)
query(left , pos) ;
else
{
sum = query(right , pos) ;
if(sum < m && (sum|tree[left].value) >= m)
{ans = get_ans(left , sum) ;}
return sum|tree[left].value;
}
}
int main()
{
//freopen("in.txt" ,"r" ,stdin) ;
int T ;
scanf("%d" ,&T) ;
int cas = 0 ;
while(T--)
{
scanf("%d%d" ,&n , &m) ;
for(int i = 1;i <= n;i++)
scanf("%d" ,&h[i]) ;
build(1 , n , 1) ;
int sum = 0;
for(int i = 1;i <= n ;i++)
{
ans = 0 ;
if(h[i] >= m)
{continue;}
query(1 , i) ;
sum += (i - ans);
}
query(1 , 9) ;
printf("Case #%d: " ,++cas) ;
printf("%d\n" ,sum) ;
}
}

最新文章

  1. 今天开始学习java编程
  2. 关于安装CentOS 7 的注意事项
  3. idea小技巧
  4. 阿里百川IMSDK--自定义群聊界面
  5. derby支持的数据类型
  6. Secure your iPhone with 6 digit passcode by upgrading to iOS9
  7. Why are very few schools involved in deep learning research? Why are they still hooked on to Bayesian methods?
  8. RESTLET开发实例
  9. Hdu 5050 Divided Land
  10. 二、HDFS学习
  11. cocos2dx3.5 HTC One X 某些UI白屏或使用ClippingNode造成部分手机白屏
  12. Java 线程宝典
  13. 【AHOI2005】病毒检测
  14. Mybatis-plus快速入门
  15. 如何在运行时(Runtime)获得泛型的真正类型
  16. Vue基础之内部指令(上)
  17. MyBatis:Pagehelper分页
  18. 百度地图web api使用案例
  19. GoLang函数参数的传递练习
  20. inline-block的间距问题

热门文章

  1. DB2数据库在线备份还原
  2. oracle函数笔记(1)
  3. day17-python之文件操作
  4. 【练习】reserving.kr 之imageprc write up
  5. LeetCode 467. Unique Substrings in Wraparound String
  6. 修改centos的yum源为国内的源
  7. 利用Bitvise SSH Client设置二级代理
  8. ajax跨域访问总结
  9. linux 在当前目录下查找一个,或者多个文件
  10. httpclient调用webservice接口的方法实例