Problem:
Score : 600 points

Problem Statement

Given are two integer sequences of N elements each: A_1,...,A_N and B_1,...,B_N.
Determine if it is possible to do the following operation at most N-2 times (possibly zero) so that, for every integer i from 1 to N, A_i \leq B_i holds:

Choose two distinct integers x and y between 1 and N (inclusive), and swap the values of A_x and A_y.

Constraints

2 \leq N \leq 10^5

1 \leq A_i,B_i \leq 10^9

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N
B_1 B_2 ... B_N

Output

If the objective is achievable, print Yes; if it is not, print No.

Sample Input 1

3
1 3 2
1 2 3

Sample Output 1

Yes

We should swap the values of A_2 and A_3.

Sample Input 2

3
1 2 3
2 2 2

Sample Output 2

No

Sample Input 3

6
3 1 2 6 3 4
2 2 8 3 4 3

Sample Output 3

Yes

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

// IOI 2021
 
#include <bits/stdc++.h>
using namespace std;

#define int ll
#define sync ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define endl "\n"
#define ends ' '
#define die(x) return cout << x << endl, 0
#define all(v) v.begin(), v.end()
#define sz(x) (int)(x.size())
#define debug(x) cerr << #x << ": " << x << endl
#define debugP(p) cerr << #p << ": {" << p.first << ", " << p.second << '}' << endl
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const ll INF = 1e9, MOD = 998244353;
 
/////////////////////////////////////////////////////////////////////
 
const int N = 1e6 + 5;

int P[N];
bool MARK[N];

void DFS(int v) {
	MARK[v] = true;
	if (!MARK[P[v]]) DFS(P[v]);
}

int32_t main() {
 
	sync;

	int n; cin >> n;
	vector<pii> A, B;
	for (int i = 1; i <= n; i++) {
		int a; cin >> a;
		A.push_back(make_pair(a, i));
	}
	for (int i = 1; i <= n; i++) {
		int b; cin >> b;
		B.push_back(make_pair(b, i));
	}
	sort(all(A));
	sort(all(B));
	for (int i = 0; i < n; i++) if (A[i].first > B[i].first) die("No");
	for (int i = 0; i < n - 1; i++) if (A[i + 1].first <= B[i].first) die("Yes");
	for (int i = 0; i < n; i++) P[A[i].second] = B[i].second;
	DFS(1);
	for (int i = 1; i <= n; i++) if (!MARK[i]) die("Yes");
	cout << "No" << endl;


	return 0;
}