题目描述
a、b是两个长度分别为n和m的数组,二者中没有相同的元素,我们可以定义一个长度为n+m的新数组merge(a,b):
如果a和b有一个为空数组,那么新数组就是非空的那个数组。即:
merge(∅,b)=b,merge(a,∅)=a.
如果a和b都非空,那么每次比较
a和b的第一个元素,选择小的那个放入新数组,并将其删除。即:
如果merge(a,b)=[a1]+merge([a2,…,an],bn)我们将a的第一个元素a1放入新数组,然后在a中将a1删除,再继续和b比较。
如果a1>b1,那么
merge(a,b)=[b1]+merge(a,[b2,…,bn]).
我们将b的第一个元素b1放入新数组,然后在b中将b1删除,再继续和a比较。
现在给你一个长度为2n的序列
p(1,2,…,2n的随机排列),问你是否存在两个长度为n的数组a和b使得p=merge(a,b)。
输入示例
第一行包含整数t(1≤t≤2000),表示测试数据组数。
对于每组测试数据,第一行包含一个整数
n(1≤n≤2000)。
第二行包含2n个整数
p1,…,p2n(1≤pi≤2n),保证p是一个序列。
保证所有测试数据n的总和不超过2000。
输出示例
对于每组测试数据,如果存在没有相同元素的数组
a和b,使得p=merge(a,b),输出"YES",否则输出"NO"。
样例#1
输入样例#1
6
2
2 3 1 4
2
3 1 2 4
4
3 2 6 1 5 7 8 4
3
1 2 3 4 5 6
4
6 1 3 7 4 5 8 2
6
4 3 2 5 1 11 9 12 8 6 10 7
输出样例#1
YES
NO
YES
YES
NO
NO
样例说明
第一个测试数据,[2,3,1,4]=merge([3,1],[2,4])。
第二个测试数据,可以发现[3,1,2,4]不能由两个长度为2的数组构成。
第三个测试数据[3,2,6,1,5,7,8,4]=merge([3,2,8,4],[6,1,5,7])。
第四个测试数据,[1,2,3,4,5,6]=merge([1,3,6],[2,4,5])。
以上只是单独拿某种情况以供参考。