CF1807G2.Subsequence Addition (Hard Version)
普及-
通过率:0%
时间限制:2.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
The only difference between the two versions is that in this version, the constraints are higher.
Initially, array a contains just the number 1. You can perform several operations in order to change the array. In an operation, you can select some subsequence† of a and add into a an element equal to the sum of all elements of the subsequence.
You are given a final array c. Check if c can be obtained from the initial array a by performing some number (possibly 0) of operations on the initial array.
† A sequence b is a subsequence of a sequence a if b can be obtained from a by the deletion of several (possibly zero, but not all) elements. In other words, select k (1≤k≤∣a∣) distinct indices i1,i2,…,ik and insert anywhere into a a new element with the value equal to ai1+ai2+⋯+aik.
两个版本的唯一区别在于,本版本的约束条件更高。
初始时,数组 a 仅包含数字 1。你可以执行若干次操作来改变该数组。每次操作中,你可以选择 a 的某个子序列†,并将该子序列所有元素之和作为一个新元素添加到 a 中。
现给定一个最终数组 c。请判断:是否存在一系列(可能为零次)操作,使得从初始数组 a 出发能够得到 c。
† 序列 b 是序列 a 的一个子序列,当且仅当 b 可通过从 a 中删除若干(可能为零个,但不能全部)元素而得到。换言之,选取 k 个(1≤k≤∣a∣)互不相同的下标 i1,i2,…,ik,并在 a 中任意位置插入一个值为 ai1+ai2+⋯+aik 的新元素。
输入格式
The first line of the input contains an integer t (1≤t≤1000) — the number of test cases. The description of the test cases follows.
The first line of each test case contains a single integer n (1≤n≤2⋅105) — the number of elements the final array c should have.
The second line of each test case contains n space-separated integers ci (1≤ci≤2⋅105) — the elements of the final array c that should be obtained from the initial array a.
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105.
输入的第一行包含一个整数 t(1≤t≤1000),表示测试用例的数量。随后是各测试用例的描述。
每个测试用例的第一行包含一个整数 n(1≤n≤2⋅105),表示最终数组 c 应包含的元素个数。
每个测试用例的第二行包含 n 个以空格分隔的整数 ci(1≤ci≤2⋅105),即应由初始数组 a 得到的最终数组 c 的各个元素。
保证所有测试用例的 n 值之和不超过 2⋅105。
输出格式
For each test case, output "YES" (without quotes) if such a sequence of operations exists, and "NO" (without quotes) otherwise.
You can output the answer in any case (for example, the strings "yEs", "yes", "Yes" and "YES" will be recognized as a positive answer).
对于每个测试用例,如果存在这样的一系列操作,则输出 "YES"(不带引号);否则输出 "NO"(不带引号)。
您可以以任意大小写形式输出答案(例如,字符串 "yEs"、"yes"、"Yes" 和 "YES" 均被视为肯定回答)。
输入输出样例
输入#1
6 1 1 1 2 5 5 1 3 2 1 5 7 1 5 2 1 3 1 1 1 5 1 1 4 2 1
输出#1
YES NO YES NO YES YES
说明/提示
For the first test case, the initial array a is already equal to [1], so the answer is "YES".
For the second test case, performing any amount of operations will change a to an array of size at least two which doesn't only have the element 2, thus obtaining the array [2] is impossible and the answer is "NO".
For the third test case, we can perform the following operations in order to obtain the final given array c:
- Initially, a=[1].
- By choosing the subsequence [1], and inserting 1 in the array, a changes to [1,1].
- By choosing the subsequence [1,1], and inserting 1+1=2 in the middle of the array, a changes to [1,2,1].
- By choosing the subsequence [1,2], and inserting 1+2=3 after the first 1 of the array, a changes to [1,3,2,1].
- By choosing the subsequence [1,3,1] and inserting 1+3+1=5 at the beginning of the array, a changes to [5,1,3,2,1] (which is the array we needed to obtain).
对于第一个测试用例,初始数组 a 已经等于 [1],因此答案为 “YES”。
对于第二个测试用例,执行任意次数的操作都会使 a 变为长度至少为 2 的数组,且该数组不可能仅包含元素 2,因此无法得到数组 [2],答案为 “NO”。
对于第三个测试用例,我们可以按以下顺序执行操作,以获得最终给定的数组 c:
- 初始时,a=[1]。
- 选择子序列 [1],并在数组中插入 1,a 变为 [1,1]。
- 选择子序列 [1,1],并在数组中间插入 1+1=2,a 变为 [1,2,1]。
- 选择子序列 [1,2],并在数组第一个 1 之后插入 1+2=3,a 变为 [1,3,2,1]。
- 选择子序列 [1,3,1],并在数组开头插入 1+3+1=5,a 变为 [5,1,3,2,1](即我们需要得到的数组)。
输入解题思路,AI测评打分。不知道怎么写?