将一个非负整数序列划分为段,分别计算出各段中的整数按位或的结果,然后再把这些结果按位与起来得到一个最终结果,把这个最终结果定义为这个序列的一个值。 比如序列为 ,如果划分为,那么值为。当然划分可能不止一种,所以值也可能不止一个。 给定一个长度为的非负整数序列,一个整数和以下三种操作: 1.给定一个整数,把序列中的所有数字按位或上。即。 2.给定一个整数,把序列中的所有数字按位与上。即。 3.查询当前序列最大的值。 lililalala太菜了,他希望你来帮他解决这个问题。
输入描述:
第一行两个整数--序列长度和划分的段数。第二行个整数。第三行一个整数--操作的数量。然后行其中第行为以下三种格式之一:--把序列中的所有数字按位或上。--把序列中的所有数字按位与上。--查询当前序列最大的值。


输出描述:
对于每次查询(操作)输出一行一个整数作为查询结果。
示例1

输入

3 2
11 30 4
5
3
1 9
3
2 22
3

输出

10
13
4

说明

第一次查询序列为\ [11,30,4],划分为\ [11],[30,4]时有最大值\ 10
第二次查询序列为\ [11,31,13],划分为\ [11,31],[13]时有最大值\ 13
第三次查询序列为\ [2,22,4],划分为\ [2,22],[4]时有最大值\ 4
加载中...