小项的有一个长度为n的数组a_1,a_2,...,a_n。一个区间l,r的权值为$al,a{l+1},...,a_r$的二进制按位与运算。在 C++ 或 Python 中,可以直接使用 & 运算符表示与运算,也就是$al&a{l+1}&...&a_r$。
小项希望在数组种选择尽可能多的,互不相交的区间,使得每个区间的权值均为2^k。(k为自然数)
区间\left[l_1,r_1\right],\left[l_2,r_2\right]相交当且仅当两个区间同时包含至少一个相同的下标,即存在 1≤i≤n 使得 l_1\le i\le r_1 且 l_2\le i\le r_2。
你需要帮助小项求出他能选出的区间数量的最大值。
从文件and.in中读入数据。输入第一行包含一个正整数n。
第二行包含n个数字,分别表示a_1,a_2,...,a_n。
输出到文件and.out中。输出仅一个数字,表示区间数量的最大值。
5 1 2 4 8 4
5
10 11 7 3 9 5 14 12 15 1 11
3
【样例1解释】
每个元素都是2^k,每个元素单独一个区间最优。
【样例2解释】
其中一种最优的方案是区间[3,4]、[5,6]、[9,9]。
区间[3,4]是3&9=1。
区间[5,6]是5&14=4。
对于所有测试数据有保证1\le n\le{2\times10}^5,1\le\ a_i\le2147483647
| 时间限制 | 1 秒 |
| 内存限制 | 128 MB |