#L5308. 「CTS2022」普罗霍洛夫卡

    ID: 4638 传统题 3000ms 256MiB 尝试: 6 已通过: 1 难度: 10 上传者: 标签>分块位运算离线查询快速沃尔什-哈达玛变换

「CTS2022」普罗霍洛夫卡

题目描述

给定序列 a1,a2,,ana_1, a_2, \dots, a_n,共 mm 次询问。每次询问给出区间 [l,r][l, r],需计算所有满足 lLRrl \le L \le R \le r 的子区间 (L,R)(L, R) 的权值的按位异或和。其中,子区间 (L,R)(L, R) 的权值定义为该子区间内不同元素的个数,即 {aiLiR}|\{a_i \mid L \le i \le R\}|

输入格式

从标准输入读入数据,格式如下:

  1. 第一行:两个整数 nnmm(分别表示序列长度和询问次数);
  2. 第二行:nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n(表示给定的序列);
  3. 接下来 mm 行:每行两个整数 llrr(表示一次询问的区间)。

输出格式

输出到标准输出,共 mm 行。每行对应一次询问的结果,即该询问区间内所有子区间权值的按位异或和。

样例

输入

5 2
1 1 1 2 4
1 5
3 5

输出

3
2

样例解释

  1. 对于第一次询问 [1,5][1, 5]
    • 所有子区间的权值及异或和计算如下:
      • 长度为 1 的子区间:权值均为 1(共 5 个),异或和为 11111=11 \oplus 1 \oplus 1 \oplus 1 \oplus 1 = 1
      • 长度为 2 的子区间:权值为 1、1、2、2(共 4 个),异或和叠加后为 1122=01 \oplus 1 \oplus 2 \oplus 2 = 0,累计异或和仍为 1;
      • 长度为 3 的子区间:权值为 1、2、2(共 3 个),异或和叠加后为 122=11 \oplus 2 \oplus 2 = 1,累计异或和为 11=01 \oplus 1 = 0
      • 长度为 4 的子区间:权值为 2、2(共 2 个),异或和叠加后为 22=02 \oplus 2 = 0,累计异或和仍为 0;
      • 长度为 5 的子区间:权值为 3(共 1 个),异或和叠加后为 3,最终累计异或和为 03=30 \oplus 3 = 3
  2. 对于第二次询问 [3,5][3, 5]
    • 所有子区间的权值及异或和计算如下:
      • 长度为 1 的子区间:权值均为 1(共 3 个),异或和为 111=11 \oplus 1 \oplus 1 = 1
      • 长度为 2 的子区间:权值为 1、2(共 2 个),异或和叠加后为 12=31 \oplus 2 = 3,累计异或和为 13=21 \oplus 3 = 2
      • 长度为 3 的子区间:权值为 2(共 1 个),异或和叠加后为 2,最终累计异或和为 22=22 \oplus 2 = 2

数据范围与提示

数据比例 约束条件
5% 1n,m1001 \le n, m \le 100
10% 1n,m50001 \le n, m \le 5000
20% 1n,m1051 \le n, m \le 10^5
30% 1n,m2×1051 \le n, m \le 2 \times 10^5
40% 1n,m3×1051 \le n, m \le 3 \times 10^5
50% 1n,m3.5×1051 \le n, m \le 3.5 \times 10^5
另外 10% m=n2m = n^2
对任意 iiai2a_i \le 2
对任意 iiai10a_i \le 10
100% 1n,m4×1051 \le n, m \le 4 \times 10^51ain1 \le a_i \le n