Ashish has n elements arranged in a line.
These elements are represented by two integers ai — the value of the element and bi — the type of the element (there are only two possible types: 0 and 1). He wants to sort the elements in non-decreasing values of ai.
He can perform the following operation any number of times:
Select any two elements i and j such that bi≠bj and swap them. That is, he can only swap two elements of different types in one move.
Tell him if he can sort the elements in non-decreasing values of ai after performing any number of operations.
Input
The first line contains one integer t (1≤t≤100) — the number of test cases. The description of the test cases follows.
The first line of each test case contains one integer n (1≤n≤500) — the size of the arrays.
The second line contains n integers ai (1≤ai≤105) — the value of the i-th element.
The third line containts n integers bi (bi∈{0,1}) — the type of the i-th element.
Output
For each test case, print “Yes” or “No” (without quotes) depending on whether it is possible to sort elements in non-decreasing order of their value.
You may print each letter in any case (upper or lower).
Example
Input
5
4
10 20 20 30
0 1 0 1
3
3 1 2
0 1 1
4
2 2 4 8
1 1 1 1
3
5 15 4
0 0 0
4
20 10 100 50
1 0 0 1
Output
Yes
Yes
Yes
No
Yes
Note
For the first case: The elements are already in sorted order.
For the second case: Ashish may first swap elements at positions 1 and 2, then swap elements at positions 2 and 3.
For the third case: The elements are already in sorted order.
For the fourth case: No swap operations may be performed as there is no pair of elements i and j such that bi≠bj. The elements cannot be sorted.
For the fifth case: Ashish may swap elements at positions 3 and 4, then elements at positions 1 and 2.
思路:我们可以找规律发现,只有序列中同时包含0或者1的话,就一定可以变得符合题意。如果只有一个数字的话,必须是非递减序列才可以。
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxx=521;
struct node{
int val;
int mk;
int id;
bool operator<(const node &a)const{
if(val!=a.val) return val<a.val;
else return id<a.id;
}
}p[maxx];
int n;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&p[i].val),p[i].id=i;
for(int i=1;i<=n;i++) scanf("%d",&p[i].mk);
if(n==1)
{
cout<<"YES"<<endl;
continue;
}
int i;
for(i=2;i<=n;i++) if(p[i].mk!=p[i-1].mk) break;
if(i>n)
{
int flag=1;
for(int j=2;j<=n;j++)
{
if(p[j].val<p[j-1].val)
{
flag=0;
break;
}
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else cout<<"YES"<<endl;
}
return 0;
}
努力加油a啊,(o)/~