#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
typedef long long ll;
using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int N;
cin >> N;
vector<int> x(N), y(N);
for(int i=0; i<N; ++i) cin >> x[i];
for(int i=0; i<N; ++i) cin >> y[i];
int q;
cin >> q;
while(q--) {
int l, r; cin >> l >> r;
vector<int> a,b; --l; --r;
vector<int> t(2*N+1);
priority_queue<pair<int, int>> left;
set<int> after; set<int> before;
for(int i=l; i<=r; ++i) {
a.push_back(x[i]);
b.push_back(y[i]);
t[y[i]] = x[i];
t[x[i]] = y[i];
left.push({x[i], i});
}
int n = a.size();
sort(b.begin(), b.end());
reverse(b.begin(), b.end());
vector<int> idx(2*N+1);
for(int i=0; i<n; ++i) {
idx[b[i]] = idx[t[b[i]]] = i;
}
bool good = 1;
for(int s=0; s<n; ++s) {
while(left.size() && left.top().first > b[s]) {
int v = left.top().first;
if(t[v] <= b[s]) after.insert(idx[v]);
else before.insert(idx[v]);
left.pop();
}
after.erase(s);
if(after.size()) after.erase(*after.begin());
else if(before.size()) before.erase(*before.begin());
else {
good = 0;
break;
}
if(t[b[s]] > b[s]) before.insert(s);
}
cout << (good ? "Yes\n" : "No\n");
}
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... |