给定一个长度为 nAn_AnA 的非降序整数数组 AAA 和一个长度为 nBn_BnB 的非降序整数数组 BBB。
请问,能否从 AAA 中挑选 kkk 个数,从 BBB 中挑选 mmm 个数,使得在 AAA 中挑选出的任何数都严格小于在 BBB 中挑选出的任何数。
输入格式
第一行包含两个整数 nA,nBn_A,n_BnA,nB。
第二行包含两个整数 k,mk,mk,m。
第三行包含 nAn_AnA 个整数 a1,a2,…,anAa_1,a_2,…,a_{nA}a1,a2,…,anA。
第四行包含 nBn_BnB 个整数 b1,b2,…,bnBb_1,b_2,…,b_{nB}b1,b2,…,bnB。
输出格式
共一行,能则输出 YES
,否则输出 NO
。
数据范围
1≤nA,nB≤105,1≤n_A,n_B≤10^5,1≤nA,nB≤105,
1≤k≤nA,1≤k≤n_A,1≤k≤nA,
1≤m≤nB,1≤m≤n_B,1≤m≤nB,
−109≤ai,bi≤109−10^9≤a_i,b_i≤10^9−109≤ai,bi≤109。
保证 AAA 和 BBB 都是非降序数组。
输入样例1:
3 3
2 1
1 2 3
3 4 5
输出样例1:
YES
输入样例2:
3 3
3 3
1 2 3
3 4 5
输出样例2:
NO
输入样例3:
5 2
3 1
1 1 1 1 1
2 2
输出样例3:
YES
#include<iostream>
using namespace std;
const int N = 100010;
int n, m, ka, kb;
int a[N], b[N];
int main(){
scanf("%d%d%d%d", &n, &m, &ka, &kb);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
for(int i = 1; i <= m; i++) scanf("%d", &b[i]);
if(a[ka] < b[m - kb + 1]) puts("YES");
else puts("NO");
return 0;
}