这道题题意:从a数组中选k个,从b数组中选m个,保证k个里面的任意一个都小于一m里面的任意一个,很明显,最优的选择就是选a里面k个最小的,b里面m个最大的;
然后用k个里面最大的,和m个里面最小的比较,因为如果a里面k个中最大的都小于了b里面m个中最小的,那么后面a的k-1个中肯定都小于了;所以sort两个数组就出来了;
#include<bits/stdc++.h>//E - Arrays
using namespace std;
typedef long long ll;
bool cmp(int a,int b){
return a>b;
}
int main(){
ll na,nb,k,m;
ll a[100050],b[100050];
scanf("%lld %lld %lld %lld",&na,&nb,&k,&m);
for(int i=0;i<na;i++)scanf("%lld",a+i);
for(int i=0;i<nb;i++)scanf("%lld",b+i);
sort(a,a+na);//由小到大
sort(b,b+nb,cmp);//由大到小
if(a[k-1]>=b[m-1])return cout<<"NO\n",0;//比较k里面最大的和b里面最小的
else return cout<<"YES\n",0;
return 0;
}