区间乘
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

给定一个长度为 n 的正整数序列 a,其中元素编号从 1n


你需要处理 q 次查询。每一次查询会给定一个目标正整数 x,你需要判断是否存在一个连续的子区间 [l, r](其中 1 \le l \le r \le n),使得该子区间内所有元素的乘积等于 x。即:



\prod_{i=l}^{r} a_i = a_l \times a_{l+1} \times \dots \times a_r = x


如果存在满足条件的连续子区间,输出 YES,否则输出 NO

输入描述:

第一行输入一个整数 T1 \le T \le 10^4),表示测试数据的组数。


对于每组测试数据:


  • 第一行输入两个整数 nq1 \le n, q \le 10^5),分别表示序列的长度和查询次数。


  • 第二行输入 n 个正整数 a_1, a_2, \dots, a_n1 \le a_i \le 10^9),表示序列 a 中的元素。


  • 接下来 q 行,每行输入一个正整数 x1 \le x \le 10^9),表示一次查询的目标乘积。


保证所有测试数据的 n 之和不超过 2 \times 10^5,所有测试数据的 q 之和不超过 2 \times 10^5

输出描述:

对于每组测试数据中的每个查询,输出一行:


  • 如果存在满足条件的连续子区间,输出YES。


  • 如果不存在满足条件的连续子区间,输出NO。


你可以以任意大小写输出YES和NO(例如,字符串yEs、yes、Yes和YES将被识别为肯定的回答)。

示例1

输入

复制
2
5 3
2 3 6 1 4
6
12
1
7 1
2 1 1 1 1 1 3
6

输出

复制
YES
NO
YES
YES

备注:

对于第一组测试数据,序列为 [2, 3, 6, 1, 4]


  1. 查询 x=6:区间 [1, 2] 乘积为 2 \times 3 = 6,存在,输出YES。


  2. 查询 x=12:不存在连续子区间的乘积等于 12,输出NO。


  3. 查询 x=1:区间 [4, 4] 乘积为 1,存在,输出YES。