这道题维护一下前缀最大值然后二分答案就好了哇 233
#include#include #include using namespace std;const int M=50007,inf=2000007;int read(){ int ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){ if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();} return ans*f;}int n,m,mx,k,l,r;int a[M],sum[M];int main(){ n=read(); m=read(); for(int i=1;i<=n;i++) a[i]=read(),mx=max(mx,a[i]),sum[i]=max(sum[i-1],a[i]); //for(int i=1;i<=n;i++) printf("%d ",sum[i]); for(int i=1;i<=m;i++){ k=read(); if(k>mx||k<=a[1]) continue; l=1,r=m; while(l<=r){ int mid=(l+r)>>1; if(sum[mid]