#include <bits/stdc++.h>
using namespace std;
#define pi pair<int, int>
#define vi vector<int>
map<int, int> lnk;
bool query(int l, int r, vi& a, vi& b) {
vi B;
int mn = INT32_MAX;
set<int> A;
for (int i = l; i <= r; i++) {
B.push_back(b[i]);
A.insert(a[i]);
mn = min(mn, a[i]);
}
sort(B.rbegin(), B.rend());
for (int i = 0; i < B.size()-1; i++) {
int x = B[i];
bool pres = A.count(lnk[x]);
A.erase(lnk[x]);
auto it = A.upper_bound(x);
// cerr << x;
if (it == A.end()) return false;
// cerr << ' ' << *it << endl;
A.erase(it);
if (pres) A.insert(lnk[x]);
}
if (A.count(mn) && lnk[B.back()] == mn) return false;
return true;
}
// 12 14 16 17
// 11 13 9 3
void solve() {
int n;
cin >> n;
vector<int> a(n), b(n);
for (int &x : a) cin >> x;
for (int &x : b) cin >> x;
for (int i = 0; i < n; i++) {
lnk[b[i]] = a[i];
// cerr << b[i] << ' ' << link[b[i]] << endl;
}
int q;
cin >> q;
while (q--) {
int l, r;
cin >> l >> r;
l--;
r--;
bool res = query(l, r, a, b);
cout << (res ? "Yes" : "No") << '\n';
}
}
/*
when is a segment not gift exchangable?
*/
int main() {
solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |