数组(秋季每日一题 36)

博客提出从非降序整数数组 A 和 B 中分别挑选 k 个数和 m 个数,使 A 中挑选的数严格小于 B 中挑选的数的问题。给出输入输出格式、数据范围及多个输入输出样例。

给定一个长度为 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,1nA,nB105,
1≤k≤nA,1≤k≤n_A,1knA,
1≤m≤nB,1≤m≤n_B,1mnB,
−109≤ai,bi≤109−10^9≤a_i,b_i≤10^9109ai,bi109
保证 AAABBB 都是非降序数组。

输入样例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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值