任选n个整数a1,a2,…,an和一个整数k。找到一组(i,j) 满足1≤i<j≤n,使得 i⋅j−k⋅(ai|aj)值最大。
这里,|是按位或运算符。
任选n个整数a1,a2,…,an和一个整数k。找到一组(i,j) 满足1≤i<j≤n,使得 i⋅j−k⋅(ai|aj)值最大。
这里,|是按位或运算符。
第一行包含一个整数t(1≤t≤10000)—测试用例的数量。
每个测试用例的第一行包含两个整数n(2≤n≤10^5)和k(1≤k≤min(n,100))。
每个测试用例的第二行包含n个整数a1,a2,…,an(0≤ai≤n)。
保证n对所有测试用例的和不超过3⋅10^5。
对于每个测试用例,打印单个整数值i⋅j−k⋅(ai|aj)。
4 3 3 1 1 3 2 2 1 2 4 3 0 1 2 3 6 6 3 2 0 0 5 6
-1 -4 3 12
假设f(i,j)=i⋅j−k⋅(ai|aj)
在第一个测试用例中,
f(1,2)=1⋅2−k⋅(a1|a2)=2−3⋅(1|1)=−1
f(1,3)=1⋅3−k⋅(a1|a3)=3−3⋅(1|3)=−6
f(2,3)=2⋅3−k⋅(a2|a3)=6−3⋅(1|3)=−3
所以最大值是f(1,2)=−1
在第四个测试用例中,最大值是f(3,4)=12