奇思妙想波奇酱
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld

题目描述

有一天,睡眠困难的波奇酱开始了奇思妙想!

定义一段长度为 n 的整数序列 a_1, a_2, \dots, a_n 的平方加权和 S 为 :

S = \sum_{i=1}^n i^2 \times a_i

波奇酱获得了一段长度为 n 的整数序列 a_1, a_2, \dots, a_n ,无聊的波奇酱将序列 \{a\} 划分成了 k 个连续的子段 A_i(i=1,2,\dots , k) ,并求得了这 k 个子段的平方加权和 S_i(i=1,2, \dots ,k)

对于第 i 个子段的平方加权和 S_i,波奇酱将其放置在了对应子段 A_i 的左侧或右侧,并且保证 S_iA_i 之间没有任何其它的元素。最后,波奇酱得到了一个长度为 n+k 的序列 b_1, b_2, \dots, b_{n+k}

由于波奇酱长时间熬夜导致记忆力下降,他只记得这个长度为 n+k 的序列 b_1, b_2, \dots, b_{n+k},而不记得原本的 a_1, a_2, \dots, a_n。除此之外,波奇酱忘记了 k 的值,也忘记了 S_i 是如何放置到序列中的。

请判断出满足波奇酱记忆的原序列 a_1, a_2, \dots, a_n 是否存在。

  • 设存在序列 a_1, a_2, \dots, a_n,那么 a_l, a_{l+1}, \dots, a_r(1\leq l \leq r \leq n) 为序列 \{a\} 的子段。}
  • 设序列 \{a\} 被划分成若干个连续的子段 A_1, A_2, \dots, A_m,则 A_1 的第一个元素为 a_1A_m 的最后一个元素为 a_nA_i 的最后一个元素在 \{a\} 中的下标为 A_{i + 1} 的第一个元素的下标减 1。例如,对于序列 \{1,6,9,7,2,3,8\},可以将其划分为 3 个连续的子段:\{1,6,9\}\{7,2\}\{3,8\}

输入描述:

输入包含多组数据。

首先输入一行一个整数 T(1 \le T \le 10^4),表示数据的组数。

对于每组数据,首先输入一行一个整数 n (2\leq n \le 10^5) ,表示序列 \{b\} 的长度。

接下来输入一行 n 个整数 b_1,b_2,\dots,b_n (1 \leq b_i \leq 10^8),表示序列 \{b\}

保证对于一个测试点的所有数据,n 的和不超过 10^5

输出描述:

输出共 T 行。

对于每组数据,输出一行一个字符串。如果序列 \{a\} 存在,输出 "Yes";否则输出 "No"。输出对大小写不敏感:例如,"YES" 和 "yEs" 都可以表示序列 \{a\} 存在。
示例1

输入

复制
2
5
1 2 9 5 5
6
40 1 2 4 1 1

输出

复制
YES
NO

说明

在第一组数据中,原序列 \{a\}\{1, 2, 5\},将其划分为 \{1, 2\}\{5\}。由于第一个子段的平方加权和为 1^2 \times 1+ 2^2 \times 2 = 9,第二个子段的平方加权和为 1^2 \times 5 = 5,所以将其按照题意放置可以得到给出的序列 \{b\}。在第二组数据中,可以证明,不存在满足题意的 \{a\}