AcWing 3817. 数组
题目描述
给定一个长度为 的非降序整数数组 和一个长度为 的非降序整数数组 。
请问,能否从 中挑选 个数,从 中挑选 个数,使得在 中挑选出的任何数都严格小于在 中挑选出的任何数。
输入格式
第一行包含两个整数 。
第二行包含两个整数 。
第三行包含 个整数 。
第四行包含 个整数 。
输出格式
共一行,能则输出 YES,否则输出 NO。
数据范围
,
,
,
。
保证 和 都是非降序数组。
样例
输入样例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
思路
非降序数组,可能是升序数组(我交的时候是升序数组,WA了排个序就行)。
这里 和 都是升序数组,题意是要从 中选 个数,都严格小于 中选 的个数。贪心的思想,选 数组中最小的 个数,选 数组中最大的 个数即可。
这里只要比较 和 的大小即可。按照前面的思想, 是 中选出来的最大值, 是 中选出来的最小值 。
代码
C++
#include <iostream>
using namespace std;
const int N = 1e5 + 5;
int A[N], B[N];
int main()
{
int a, b, k, m;
scanf("%d %d %d %d", &a, &b, &k, &m);
for ( int i = 0; i < a; i ++ ) scanf("%d", &A[i]);
for ( int i = 0; i < b; i ++ ) scanf("%d", &B[i]);
printf("%s\n", A[k - 1] < B[b - m] ? "YES" : "NO");
return 0;
}
Java
import java.util.*;
public class Main
{
private static Scanner in = new Scanner(System.in);
private static final int N = (int) (1e5) + 5;
private static int A[] = new int[N], B[] = new int[N];
public static void main(String args[])
{
int a = in.nextInt(), b = in.nextInt(), k = in.nextInt(), m = in.nextInt();
for ( int i = 0; i < a; i ++ ) A[i] = in.nextInt();
for ( int i = 0; i < b; i ++ ) B[i] = in.nextInt();
System.out.printf("%s\n", A[k - 1] < B[b - m] ? "YES" : "NO");
}
}
