[Ynoi2005] rpxleqxq

题目描述

给你一个长度为 $n$ 的正整数序列 $a$,和一个常数 $x$ 。 定义 $x \oplus y$ 表示 $x$ 异或 $y$。 有 $q$ 次询问,每次询问给出一段区间 $[l, r]$,问你这个区间中有多少二元组 $(i, j)$ 满足 $i < j \land (a_i \oplus a_j) \le x$。

输入输出格式

输入格式


第一行两个正整数 $n, x$ ,分别表示序列长度和给定的常数。 后面一行 $n$ 个整数表示序列 $a$ 。 第三行一个正整数 $q$ 表示询问组数。 后面 $q$ 行,每行两个正整数 $l, r$ 表示一次询问。

输出格式


输出 $q$ 行,每行一个整数表示答案。

输入输出样例

输入样例 #1

11 4
11 4 5 1 4 1 9 1 9 8 10
5
1 4
1 9
1 9
8 10
8 10

输出样例 #1

2
12
12
1
1

说明

Idea:Dpair,Solution:Dpair,Code:Dpair,Data:Dpair&nzhtl1477 对于 $1\%$ 的数据,为样例。 对于另外 $19\%$ 的数据,满足 $n,q\le 100$。 对于另外 $19\%$ 的数据,满足 $n,q\le 1000$。 对于另外 $19\%$ 的数据,满足 $q\le 100$。 对于另外 $19\%$ 的数据,满足 $a_i,x\le 100$。 对于 $100\%$ 的数据,满足 $1 \le n, a_i, x\le 2\times 10^5, 1 \le q \le 10^6$ 。