解析:
贪心,将每个数除到第一个没有出现的数字就停止。
- #include
- using namespace std;
- #define int long long
- const int N=2e5+5;
- int n,x,f[N];
- void solve(){
- scanf("%lld",&n);
- memset(f,0,sizeof f);
- for(int i=1;i<=n;i++){
- scanf("%lld",&x);
- while(x>n||x/2>0&&f[x]) x/=2;
- f[x]++;
- }
- for(int i=1;i<=n;i++) if(!f[i]){
- puts("NO");
- return;
- }
- puts("YES");
- }
- signed main(){
- int t=1;
- scanf("%lld",&t);
- while(t--) solve();
- return 0;
- }