#CSP1107. 异或区间(xor)

异或区间(xor)

题目描述

小 Z 有一个长度为 nn 的非负整数序列 A={a1,a2,⋯ ,an} A =\{a_1,a_2,\cdots,a_n\}。

现在,小 Z 需要统计二元组 (i,j)(i,j) 的数量,满足 1≤i≤j≤n1 \le i \le j \le n 且 $a_i \oplus a_{i+1} \oplus ... \oplus a_j \le \max\{a_i,a_{i+1},...,a_{j}\}$,其中 ⊕\oplus 表示按位异或运算。

输入格式

从 xor.in 文件读入数据。

输入数据第一行包含一个正整数 nn,表示序列长度。

第二行包含 nn 个整数,a1,a2,⋯ ,ana_1,a_2,\cdots,a_n。

输出格式

输出到 xor.out 文件。

输出一行一个整数表示合法的二元组 (i,j)(i,j) 的数量。

样例

4
1 2 4 3
5

样例 2

点击链接 ex_xor2.in 和 ex_xor2.out 下载大样例 2 的输入数据和输出数据。

说明/提示

样例 1 解释

满足条件的二元组有 (1,1),(1,4),(2,2),(3,3),(4,4)(1,1),(1,4),(2,2),(3,3),(4,4)。

数据范围

  • 对于前 20%20\% 的数据,n≤2∗103n \le 2*10^3。
  • 对于另外 20%20\% 的数据,ai≤8a_i\le 8。
  • 对于另外 20%20\% 的数据,a1≤a2≤...≤ana_1 \le a_2 \le ... \le a_n。
  • 对于另外 20%20\% 的数据, aia_i 在 [0,230)[0,2^{30}) 范围内均匀随机生成。
  • 对于 100%100\% 的数据,1≤n≤1051 \le n \le 10^5,0≤ai<2300 \le a_i <2^{30}。