莫队算法模板

莫队算法除了add 和 del 其他部分基本不变,就拿一题的题解来当模板用吧。
http://codeforces.com/contest/617/problem/E

题意:

给你nn个数,mm个查询和一个数值kk,然后每次查询输入l,rl,r并问你区间[l,r]内有几对i,ji,j 使得aiai+1...aj=ka_i \bigoplus a_{i+1}\bigoplus...\bigoplus a_j=k。(\bigoplus是异或的意思)
数据范围打开链接看就行

题解:

对于这题我们可以通过处理前缀和算出aiai+1...aj=ka_i \bigoplus a_{i+1}\bigoplus...\bigoplus a_j=k的值,实际上aiai+1...aj=sum[i1]sum[j]a_i \bigoplus a_{i+1}\bigoplus...\bigoplus a_j=sum[i-1]\bigoplus sum[j]
知道这个公式之后,我们再讲讲怎么用莫队处理
我们用一个数组flag[]储存在查询过程中前缀和出现了多少次。为什么要这样做呢?这是因为
sum[i1]sum[i1]sum[j]=sum[j]=sum[i1]ksum[i-1]\bigoplus sum[i-1]\bigoplus sum[j]=sum[j]=sum[i-1]\bigoplus k