CodeForces - 572A Arrays(贪心)

A. Arrays
time limit per test2 seconds
memory limit
per test256 megabytes
inputstandard input
outputstandard output
You are given two arrays A and B consisting of integers, sorted in non-decreasing order. Check whether it is possible to choose k numbers in array A and choose m numbers in array B so that any number chosen in the first array is strictly less than any number chosen in the second array.

Input
The first line contains two integers nA, nB (1 ≤ nA, nB ≤ 105), separated by a space — the sizes of arrays A and B, correspondingly.

The second line contains two integers k and m (1 ≤ k ≤ nA, 1 ≤ m ≤ nB), separated by a space.

The third line contains nA numbers a1, a2, … anA ( - 109 ≤ a1 ≤ a2 ≤ … ≤ anA ≤ 109), separated by spaces — elements of array A.

The fourth line contains nB integers b1, b2, … bnB ( - 109 ≤ b1 ≤ b2 ≤ … ≤ bnB ≤ 109), separated by spaces — elements of array B.

Output
Print “YES” (without the quotes), if you can choose k numbers in array A and m numbers in array B so that any number chosen in array A was strictly less than any number chosen in array B. Otherwise, print “NO” (without the quotes).

Examples
input
3 3
2 1
1 2 3
3 4 5
output
YES
input
3 3
3 3
1 2 3
3 4 5
output
NO
input
5 2
3 1
1 1 1 1 1
2 2
output
YES
Note
In the first sample test you can, for example, choose numbers 1 and 2 from array A and number 3 from array B (1 < 3 and 2 < 3).

In the second sample test the only way to choose k elements in the first array and m elements in the second one is to choose all numbers in both arrays, but then not all the numbers chosen in A will be less than all the numbers chosen in B: .

题意:

a数组取k个数
b数组取m个数
问是否存在一种取法能够使得所有a数组取出的数严格小于b数组取出的数

那就两个sort一下a取最小的k个,b取最大的m个比较一下大小就好啦。后来发向他都给你。。。排序好了。。。
一个if解决。。签到题。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;
const int maxn=1e5+5;
int a[maxn],b[maxn],na,nb,m,k;

int main()
{
  while(~scanf("%d%d",&na,&nb))
  {
    scanf("%d%d",&k,&m);
    for(int i=1;i<=na;++i)scanf("%d",a+i);
    for(int i=1;i<=nb;++i)scanf("%d",b+i);

    if(a[k]<b[nb-m+1])printf("YES\n");
    else printf("NO\n");
  }
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值