#P0107. 子序列是排列的移位

子序列是排列的移位

题目描述

给定一个长度为 nn 的排列 p1,p2,,pnp_1, p_2, \ldots, p_n

我们称另一个长度为 nn 的序列是排列 pp 的一个 循环移位,当且仅当我们可以通过执行若干次(可能 00 次)如下操作是排列 pp 变成这个序列:

将排列 pp 当前的首元素取出并放到排列 pp 的末尾。

比如:排列 (2,1,3)(2, 1, 3) 一共有 33 个不同的循环移位,它们是 (2,1,3)(2, 1, 3)(1,3,2)(1, 3, 2)(3,2,1)(3, 2, 1)

现在还给了你一个长度为 mm 的序列 a1,a2,,ama_1, a_2, \ldots, a_m 以及 qq 次询问。

ii 次询问给你两个整数 lil_irir_i,你需要判断出序列 aa 从第 ll 个元素到第 rr 个元素(包括第 ll 个和第 rr 个元素)对应的这段序列中能否取出一个子序列,该子序列是排列 pp 的一个循环移位。

即:你需要判断是否能够找到 nn 个下标 i1,i2,,ini_1, i_2, \ldots, i_n 满足 lii1<i2<<inril_i \le i_1 \lt i_2 \lt \ldots \lt i_n \le r_i 且序列 ai1,ai2,,aina_{i_1}, a_{i_2}, \ldots, a_{i_n} 是排列 pp 的一个循环移位。

输入格式

第一行,三个整数 n,m,q(1n,m,q2105)n, m, q(1 \le n,m,q \le 2 \cdot 10^5),以空格分隔。

第二行,nn 个整数 p1,p2,,pnp_1, p_2, \ldots, p_n,两两之间以一个空格分隔,表示一个排列。

第三行,mm 个整数 a1,a2,,am(1ain)a_1, a_2, \ldots, a_m(1 \le a_i \le n),两两之间以一个空格分隔。

接下来 qq 行,每行包含两个整数 lil_irir_i1lirim1 \le l_i \le r_i \le m),以一个空格分隔,表示一次询问。

输出格式

输出一个仅由字符 10 构成的字符串。

对于第 ii 次询问,如果区间 [li,ri][l_i, r_i] 存在至少一个子序列是排列 pp 的一个循环移位,则第 ii 个字符为 1,否则第 ii 个字符为 0

样例

3 6 3
2 1 3
1 2 3 1 2 3
1 5
2 6
3 5
110
2 4 3
2 1
1 1 2 2
1 2
2 3
3 4
010

说明/提示

数据规模与约定

  • 对于 20%20\% 的数据,n,m,q20n,m,q \le 20
  • 对于 50%50\% 的数据,n,m,q2000n,m,q \le 2000
  • 对于 100%100\% 的数据,1n,m,q21051 \le n,m,q \le 2 \cdot 10^5