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: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<int(n);++i)
#define all(a) (a).begin(),(a).end()
typedef long long ll;
#define rep1(i,n) for(int i=1;i<=int(n);++i)
#define lb(s,x) (lower_bound(all(s),x)-s.begin())
#define ub(s,x) (upper_bound(all(s),x)-s.begin())
#define uniq(a) a.erase(unique(all(a)),a.end())
#define bit(k) (1LL<<(k))
const int INF = 1e9;

#define debug(x) cerr<<(#x)<<": "<<(x)<<endl
template<class T,class U>
ostream& operator<<(ostream& o, const pair<T,U> &p){
    o<<"("<<p.first<<", "<<p.second<<")";
    return o;
}
#define print(v) { cerr<<#v<<": [ "; for(auto _ : v) cerr<<_<<", "; cerr<<"]"<<endl; }


bool solve(){
    int n;
    cin >> n;
    vector<int> a(n),b(n);
    rep(i,n) cin >> a[i];
    rep(i,n) cin >> b[i];
    {
        vector<int> ta = a, tb = b;
        sort(all(ta));
        sort(all(tb));
        rep(i,n){
            if (ta[i] > tb[i]) return false;
        }
    }

    // priority_queue<P,vector<P>,greater<P>> paths;
    using P = pair<int,int>;
    vector<P> v(n);
    map<int,int> cntA;
    rep(i,n){
        v[i] = {b[i], a[i]};
        cntA[a[i]] ++;
    }
    sort(all(v));
    int cnt = 0;
    rep(i,n){
        int ai = v[i].first;
        int bi = v[i].first;
        cntA[ai]--;
        if (cntA[ai] == 0) cntA.erase(ai);
        if (ai <= bi) continue;
        cnt++;
        auto itr = cntA.upper_bound(bi);
        if (itr == cntA.begin()) return false;
        --itr;
        cntA[ai]++;
        itr->second --;
        if (itr->second == 0) cntA.erase(itr);
    }
    return cnt <= n-2;
}

int main(void){
    cout << ((solve()) ? "Yes" : "No") << endl;
    return 0;
}