问题 6438 --最大的r值

6438: 最大的r值★★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 9  解决: 3
[提交][状态][命题人:]

题目描述

给我们一个长度为n的整数序列a: a1,a2,…,ai,…,an,定义f(l,r)如下:

F(l,r)=al&al+1&al+2&…&ar (显然,l应该不大于r&为位与运算符)

现向我们发出q次询问,每次询问给我们两个值:kl,请你帮忙找出最大的rr>=l)值,使得f(l,r)>=k成立。

输入

       第一行包含一个整数t(1≤t≤1e4)——测试用例的数量。

对于每个测试用例:

第一行一个整数n1<=n<=2e5:整数序列a的长度;

第二行共n个整数a1,a2,…,ai,…,an1<=ai<=1e9),为序列an个元素。

第三行一个整数q1<=q<=1e5),为询问次数。

接下来共q行,对应q次询问,每行两个整数l和k1≤l≤n, 1≤k≤1e9):l为子序列的左边界,k值见题中描述。

保证所有测试用例的 n 之和与 q 之和均不超过 2e5 。

输出

       输出共t行,每个测试用例一行。

对于每个测试用例,共输出q个整数(空格隔开),第i个整数为第i次询问时候能够球的的最大整数rl<=r<=n: r为满足F(l,r)>=k的最大右边界值。特别提醒,如果不存在满足要求的r值,则输出:-1

样例输入
Copy
3
5
15 14 17 42 34
3
1 7
2 15
4 5
5
7 5 3 1 7
4
1 7
5 7
2 3
2 2
7
19 20 15 12 21 7 11
4
1 15
4 4
7 12
5 7
样例输出
Copy
2 -1 5 
1 5 2 2 
2 6 -1 5 

提示

来源

 

[提交][状态]