思路
首先对所有区间的数进行标记,当然是使用差分啦,只需要记录到0~1e6的数据即可,然后对于每个询问的数,判断其倍数是否出现过,同时将倍数记录,倍数只需枚举到1e6即可。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{
int n,q,l,r,x,m=0;
cin>>n>>q;
while(n--){
cin>>l>>r;
a[l]++;
a[r+1]--;
if(r>m)m=r;
}
for(int i=1;i<=m;i++)a[i]+=a[i-1];
a[1]++;
while(q--){
cin>>x;
bool flag=0;
if(a[x])cout<<"NO"<<endl;
else{
for(int i=1;i*x<=m;i++){
if(a[i*x]){
flag=1;
a[x]++;
break;
}
}
if(flag)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}
return 0;
}