rt,感觉复杂度不对,但是跑的还挺快。
#include<bits/stdc++.h>
#define ll long long
#define R register
using namespace std;
const int N=1e5+5,M=1e7+5;
struct node{int l,r;}ans[N*100];
int n,q,pr[N];
inline bool check(int x,int lst){
int mn=x;
for(R int i=1;i<=n;++i){
mn=min(mn,x-x%pr[i]);
if(mn<lst)return 1;
}
return 0;
}
int main(){
ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
cin>>n>>q;
for(R int i=1;i<=n;++i){
cin>>pr[i];
}
sort(pr+1,pr+n+1);
n=unique(pr+1,pr+n+1)-pr-1;
int tot=0;
for(int l=1,res,r;l<=M-5;l=res+1){
int ls=l;r=M-5;res=-1;
while(ls<=r){
int mid=ls+r>>1;
if(check(mid,l))ls=mid+1,res=mid;
else r=mid-1;
}
if(res==-1)break;
ans[++tot]={l,res};
}
while(q--){
int x;cin>>x;
if(x==0)cout<<0<<'\n';
else{
int l=1,r=tot;
if(ans[r].r<x){
cout<<"oo\n";continue;
}
int res=tot;
while(l<=r){
int mid=l+r+1>>1;
if(ans[mid].l<=x)res=mid,l=mid+1;
else r=mid-1;
}
cout<<res<<'\n';
}
}
return 0;
}