この問題では主にソートか連想配列を問います。
つの列 が等しくなるのは、 にある要素の個数が両方とも等しくなる場合のみです。 このように言うと連想配列で各要素の個数を確認する解法に他ないと思われますが、実は を昇順か降順にソートし、 要素ずつ確かめていくことでも判定することが可能です。 例えば の場合などでは、 を順列として一致することは を両方とも昇順または降順にソートをしたものが一致することが必要十分です。 よって をソートする時間がネックとなり、 で実装することが可能です。連想配列の解法でも同じような計算量になります。
以下はソートを用いた解答例(C++)です。
xxxxxxxxxx
using namespace std;
using ll = long long;
using P = pair<ll,ll>;
using pq = priority_queue<ll,vector<ll>,greater<ll>>;
ll INF = 1LL<<60;
struct Edge { int to; int cost; int from; };
using Graph = vector<vector<int>>;
int main(void){
int n; cin >> n;
vector<int> A(n),B(n);
rep(i,n) cin >> A[i];
rep(i,n) cin >> B[i];
sort(all(A)); sort(all(B));
cout << (A == B ? "Yes" : "No");
}