#P242. 子段异或

子段异或

题目描述

给定一个长度为 nn 的数列 a1,a2,⋯ ,ana_1,a_2,\cdots,a_n,计算这个序列所有连续子序列的和的异或值,也就是计算

$$\bigoplus_{1\leq i\leq j\leq n} \{ a_i+a_{i+1}+\cdots+a_{j-1}+a_{j} \}$$

其中 ⊕\oplus 表示异或运算。例如对于数列 20,10,3520,10,35,有六个子序列,它们的和分别是:2020、1010、3535、20+1020+10、10+3510+35、20+10+3520+10+35,它们的异或和为 7979。

输入格式

第一行:单个整数 nn; 第二行:nn个整数表示 a1,a2,⋯ ,ana_1,a_2,\cdots,a_n。

输出格式

单个整数:所有连续子序列的和的异或值。

3
20 10 35
79

数据范围

  • 0≤ai0\leq a_i;
  • a1+a2+⋯+an≤1,000,000a_1+a_2+\cdots+a_n\leq 1,000,000;
  • 对于 30%30\% 的数据,1≤n≤1031\leq n \leq 10^3;
  • 对于 60%60\% 的数据,1≤n≤1041\leq n \leq 10^4;
  • 对于 100%100\% 的数据,1≤n≤1051\leq n \leq 10^5。