端倪发生器¶
预估时间限制:2.5 秒。内存限制:1024 MB。
实际时限以标准程序在目标环境的最慢用例中位时间乘以 \(2\) ,按 \(0.5\) 秒向上取整。参考环境见评测说明。
背景故事¶
“老PJ阴啊,这一定发生了什么端倪!”
读者可以自行证明,2018年的 UNR Day 2 T3 是一个长度为 \(N\) 的序列,每个元素都是绝对值不超过 \(10^9\) 的整shun。
老ZY发现,一段和为零的区间能够发生端倪。如果有足够多的端倪,就能制造出端倪发生器。我们把一段区间的端倪强度定义为:其中所有和为零的子区间的长度之和。
现在,老ZY要在这个序列中选择 \(M\) 个区间,询问每个区间的端倪强度。为了防止你离线处理,询问使用上一次的答案加密;第一次询问前,上一次答案视为零。
形式化问题描述¶
给定长度为 \(N\) 的整数序列 \(a_1,\ldots,a_N\) .回答 \(M\) 次询问。对于解码后的闭区间 \([l,r]\) ,答案为
方括号表示条件成立时为一,否则为零。即把询问区间内所有非空、和为零的子区间长度相加。
令 last 为上一询问的答案,第一次询问前为零。每次读到原始整数 \(u,v\) 后,计算
再令 \(l=\min(x,y)\) 、\(r=\max(x,y)\) .XOR 为非负整数的按位异或,使用完整的上一答案,不截断为三十二位。输出本次答案后更新 last .询问不修改序列,答案不取模。
输入格式¶
第一行两个整数 \(N,M\) .第二行 \(N\) 个整数 \(a_1,\ldots,a_N\) .接下来 \(M\) 行,每行两个尚未解码的整数 \(u,v\) .
输出格式¶
输出 \(M\) 行,每行一个整数,依次表示各询问的答案。
样例¶
样例 1¶
输入¶
4 2
1 -1 2 -2
0 3
0 0
输出¶
8
0
样例 2¶
输入¶
7 2
0 0 0 0 0 0 0
0 6
0 6
输出¶
84
56
样例 3¶
输入¶
1 2
0
0 0
1000000000 1000000000
输出¶
1
1
样例解释¶
第一组第一次询问为 \([1,4]\) ,零和区间是 \([1,2]\) 、\([3,4]\) 、\([1,4]\) ,长度和为八。随后 last=8 ,第二次解码为 \([1,1]\) ,答案零。第二组先查询七个零,答案为 \(7\times8\times9/6=84\) ;下一次解码为 \([1,6]\) ,答案为五十六。第三组始终查询唯一的零。
数据范围与保证¶
\(1\le N,M\le10^5\) , \(|a_i|\le10^9\) , \(0\le u,v\le10^9\) .
| 分值比例 | 额外条件 |
|---|---|
| 100% | 无额外条件 |