#P1187. 指示灯齐全区间

    ID: 199 传统题 1000ms 128MiB 尝试: 0 已通过: 0难度: 普及+/提高− ← 上一题 下一题 → 随机一题 上传者: 标签 双指针 位运算 滑动窗口 数组
显示设置

指示灯齐全区间

题目背景

机房的巡检记录是一串整数,每个整数记着一次自检时点亮的指示灯:二进制下第 bb 位为 11 表示第 bb 号灯当时是亮的。值班员要挑出一段连续的记录,要求这段时间里 00 号灯到 k−1k-1 号灯都亮过。他想知道这样的连续段一共有多少段。

题目描述

给定 nn 个非负整数 a1,a2,…,ana_1, a_2, \dots, a_n 与整数 kk。

对于区间 [l,r][l, r](1≤l≤r≤n1 \le l \le r \le n),把 al,al+1,…,ara_l, a_{l+1}, \dots, a_r 全部按位或起来,得到结果 SS。如果 SS 的二进制表示中第 00 位到第 k−1k-1 位全都是 11,就称这个区间是齐全的。

请求出齐全区间的个数。

输入格式

第一行两个整数 n,kn, k。

第二行 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n。

输出格式

一行一个整数,表示齐全区间的个数。

输入输出样例 #1

输入 #1

3 2
1 2 3

输出 #1

4

输入输出样例 #2

输入 #2

2 3
1 2

输出 #2

0

输入输出样例 #3

输入 #3

4 1
0 1 0 1

输出 #3

8

说明

样例解释

样例 1 共有 66 个区间。单个数的区间中,a1=1a_1 = 1 只有第 00 位是 11,a2=2a_2 = 2 只有第 11 位是 11,都不齐全;a3=3a_3 = 3 两位都是 11,齐全。三个更长区间的按位或都是 33,也都齐全。所以答案是 44。

样例 2 中两个数的按位或结果是 33,第 22 位始终是 00,k=3k = 3 时任何区间都不齐全。

样例 3 中共有 1010 个区间,只有 [1,1][1,1] 与 [3,3][3,3] 的按位或为 00(第 00 位不是 11),其余 88 个区间都包含至少一个 11,因此答案 88。

数据范围

  • 对于 30%30\% 的数据,n≤300n \le 300,k≤5k \le 5;
  • 对于 60%60\% 的数据,n≤5000n \le 5000;
  • 对于 100%100\% 的数据,1≤n≤2×1051 \le n \le 2 \times 10^5,1≤k≤301 \le k \le 30,0≤ai<2300 \le a_i < 2^{30}。