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 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<stdlib.h>

struct v{
	long long a;
	long long b;
	int na;
};

int compare_int(const void *a,const void *b){
	if(*(long long*)a>*(long long*)b)return 1;
	return -1;
}
int compare_intt(const void *a,const void *b){
	struct v A=*(struct v*)a,B=*(struct v*)b;
	if(A.b>B.b)return 1;
	else if(A.b==B.b){
		if(A.a<B.a)return 1;
	}return -1;
}

int main(){
	int n,i;
	struct v b[100000];
	long long acp[100000];
	scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%lld",&b[i].a),acp[i]=b[i].a;
	for(i=0;i<n;i++)scanf("%lld",&b[i].b);
	qsort(acp,n,sizeof(long long),compare_int);
	for(i=0;i<n;i++){
		long long am=b[i].a;
		int r=n,l=-1;
		while(r-l>1){
			int mid=(r+l)/2;
			if(acp[mid]>=am)r=mid;
			else l=mid;
		}
		if(acp[r]==b[i].a)b[i].na=r;
		else b[i].na=l;
	}
	qsort(b,n,sizeof(b[0]),compare_intt);
	for(i=0;i<n;i++){
		if(acp[i]>b[i].b){
			puts("No");
			return 0;
		}
	}
	if(n==2){
		if(b[0].a>b[0].b){
			puts("No");
		}else puts("Yes");
		return 0;
	}
	for(i=0;i<n;i++){
		if(acp[i]==b[i].a){
			puts("Yes");
			return 0;
		}
	}
	int c=0,co=0;
	while(1){
		c=b[c].na;
		if(c==0)break;
		co++;
	}
//	printf("%d\n",co);
	if(co<n-1)puts("Yes");
	else puts("No");
	return 0;
}