2021杭电1 1006 xor sum
【题目】
给定n个数和一个数k,求出最短的连续的一段数,使得它们的异或和大于等于k,如果没有则输出-1。
其中1<=n<=1e5,0<=k, ai<=2^30
【思路】
用字典树(01树)保存 前缀亦或a[]
每次插入时更新mx[] 使之为最右a[i]即 i最大
每次遍历时只遍历与当前a[i]亦或值大于等于k的,同时更新res(对于当前i的最右值)
当i-res<当前最小值时,更新答案
复杂度(nlogn)
【代码】
#include<bits/stdc++.h>
原创
2021-07-24 09:42:29 ·
92 阅读 ·
0 评论