佛山移动网站建设公司,青岛城阳 软件网站开发,建设合同施工合同示范文本,网站开发公司云鲸互创实惠给定一个非负整数数列 a#xff0c;初始长度为 N。
请在所有长度不超过 M 的连续子数组中#xff0c;找出子数组异或和的最大值。
子数组的异或和即为子数组中所有元素按位异或得到的结果。
注意#xff1a;子数组可以为空。
输入格式
第一行包含两个整数 N,M。
第二行…给定一个非负整数数列 a初始长度为 N。
请在所有长度不超过 M 的连续子数组中找出子数组异或和的最大值。
子数组的异或和即为子数组中所有元素按位异或得到的结果。
注意子数组可以为空。
输入格式
第一行包含两个整数 N,M。
第二行包含 N 个整数其中第 i 个为 ai。
输出格式
输出可以得到的子数组异或和的最大值。
数据范围
对于 20% 的数据1≤M≤N≤100 对于 50% 的数据1≤M≤N≤1000 对于 100% 的数据1≤M≤N≤10^5,0≤ai≤2^31−1
输入样例
3 2
1 2 4输出样例
6 这里用到trie树存储数据具体可参考最大异或对的解法
http://t.csdn.cn/DD8lX
和trie树的模板参考http://t.csdn.cn/wyvow
也是声明son数组从第31位开始存。这里用到了前缀异或和当超出m的限制时需要将区间往后移所以额外声明cnt数组来判断该点是否存在所求的区间里于是在插入操作时额外定义一个参数v表示插入或者删去。 以下是代码详解