一道超级简单的结论题。
我们来分两种情况讨论:
-
如果 m < n m<n m<n。输出
YES
。可以把所有 w i w_i wi 都设为 1 1 1,显然这时 a a a 数组大。 -
否则,即 m ≥ n m\ge n m≥n。可以发现,把 a a a 和 b b b 数组从大到小排序后,可以发现,只要有一个 b i < a i b_i < a_i bi<ai,把 w a i w_{a_i} wai 赋为尽可能大的数后,总是有方法让 a a a 数组大,输出
YES
。最后,如果对于所有 i ( 1 ≤ i ≤ n ) i(1\le i\le n) i(1≤i≤n), b i ≥ a i b_i\ge a_i bi≥ai,那就没有办法了,输出NO
。
代码如下:
#include <bits/stdc++.h>
using namespace std;
//#define int long long
typedef long long ll;
typedef pair<int, int> pr;
#define up(i, l, r) for(int i = (l); i <= (r); i++)
#define down(i, r, l) for(int i = (r); i >= (l); i--)
const int mod = 1000000007;
const int base = 2333;
const double eps = 1e-6;
inline int read() {
int x = 0, f = 1; char ch = getchar();
while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); }
while(ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); }
return x * f;
}
int n, m, k, Q, T, _, ans = 0;
int a[100007], b[100007];
inline bool cmp(int x, int y) {
return x > y;
}
signed main() {
n = read(), m = read(), k = read();
for(int i = 1; i <= n; i++) a[i] = read();
for(int i = 1; i <= m; i++) b[i] = read();
if(m < n) {
cout << "YES";
return 0;
}
sort(a + 1, a + n + 1, cmp);
sort(b + 1, b + m + 1, cmp);
for(int i = 1; i <= n; i++)
if(b[i] < a[i]) {
cout << "YES";
return 0;
}
cout << "NO";
return 0;
}