Problem - 1624C - Codeforces
解析:
贪心,将每个数除到第一个没有出现的数字就停止。
#include<bits/stdc++.h>
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;
}