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;
} 


















