首页 > 试题广场 >

Data Structure

[编程题]Data Structure
将一个非负整数序列划分为段,分别计算出各段中的整数按位或的结果,然后再把这些结果按位与起来得到一个最终结果,把这个最终结果定义为这个序列的一个值。
比如序列为 ,如果划分为,那么值为。当然划分可能不止一种,所以也可能不止一个。
给定一个长度为的非负整数序列,一个整数和以下三种操作:
    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

这道题你会答吗?花几分钟告诉大家答案吧!