莫队 Codeforces Round #340 (Div. 2) E

时间:2023-03-10 04:46:13
莫队 Codeforces Round #340 (Div. 2) E

题目大意:给你一个长度为n的序列,有m个询问,每次询问一个区间[L,R],表示这个区间内,有多少的a[i]^a[i+1].....^a[j]=k。

思路:莫队去搞就好了

我们定义pre[i]=a[1]^a[2]^....a[i],然后我们再去更新就好了,这里,我们定义区间[L,R]表示我们所要询问的区间即可。然后这里会有一个疑惑,就是为什么while(l<Q[i].l) { Delete(l-1); l++; }和while(l>Q[i].l) { l--; Updata(l-1); }是这样子呢,这样子的话L和R的区间岂不是少删除了一个区间吗——但是其实不是这样的,因为我们要就比如说目前我们要求[3,5]这个区间,我们要保留pre[2]这个区间,这样的话,才能保证pre[i]^pre[2]才是我们所需要的区间

具体代码看卿学姐的吧:链接