0;因此一个数最终能变成的值集合是它不断对半后的所有值。1..n 都恰好被占用一次。给出长度为 m 的整数序列 v 。允许对 v 反复执行下述动作(也可以一次都不做):
小欧想弄清:能否找到一串动作,让全部动作结束后序列 v 恰好变成某个排列?
【名词解释】
所谓长度为 m 的排列,就是把 1 到 m 各用一次、次序任意排好的序列。譬如,{4,1,5,2,3} 属于长度为 5 的排列,{2,2,3} 与 {2,3,4} 则都算不上排列:前者有重复,后者出现了越界的值。
一份测试文件里会塞进若干组数据。首行读入一个整数 q(1≤q≤104) 用来说明组数,各组数据按下面方式给出:
首行含有一个整数 m(1≤m≤2×105) ,用来说明序列 v 有多长。
次行含有长度为 m 个整数,0≤vp≤109
另外限制:单份文件里各组 m 加起来不会超过 2×105 。
打印 q 行,其中第 p 行对应第 p 组数据的结果。对每一组,若能做到,就在该行写下 YES ; 不然直接写下 NO 。大小写怎么写都算数。比如字符串 yEs、yes 和 Yes 一律当成肯定。
输入
4
3
2 3 8
2
2 2
1
0
4
16 8 4 2
输出
YES
YES
NO
NO
说明
对于第 1 组数据,可把值为 8 的元素连着减半两次得到 2,再把原先那个 2 减半得到 1,序列变成 {1,3,2} ,构成长度为 3 的排列。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册