Description
给定一个长度为 n 的 01 串 s,q 次询问:
- 给定 l,r,k,问 s[l,r] 中选两个长度为 k 的子序列的 xor 最大是多少,01 串看成 2 进制后转成 10 进制。两个子序列要满足:设第一个子序列下标是 p1,p2,⋯,pk,其中 l≤pi≤r;设第二个子序列下标是 q1,q2,⋯,qk,其中 l≤qi≤r,则对于任意 1≤i,j≤k,pi=qj。
最大指的是「01 串看成 2 进制后转成 10 进制」数值最大。
比如,如果我们 0101010111 中选择了 0101010111(前两个是第一个序列,后两个是第二个序列),答案是 (00)2⊕(11)2=(3)10。
由于答案可能过大,所以请输出答案对 109+7 取模后的结果。
第一行输入正整数 n,q。
第二行输入字符串 s。
第 3∼q+2 行,输入询问中的 l,r,k。
输出 q 行,表示答案。
10 5
0101001111
1 10 5
1 4 2
4 10 3
1 6 3
7 10 2
30
3
6
6
0
Hint
对于 100% 的数据,1≤n,q≤106,2≤2k≤r−l+1,s 由 0,1 构成。
| 子任务 |
n,q≤ |
k≤ |
特殊性质 |
分值 |
| 1 |
20 |
10 |
无 |
10 |
| 2 |
100 |
50 |
| 3 |
106 |
10 |
| 4 |
5⋅105 |
A |
| 5 |
103 |
500 |
无 |
20 |
| 6 |
106 |
5⋅105 |
40 |
特殊性质 A:s 中 1 的个数 ≤10 且 k≥10。