# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1206030 | ofoz | Gift Exchange (JOI24_ho_t4) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "interactive.h"
using namespace std;
#define vi vector<int>
#define pi pair<int, int>
void solve() {
int n;
cin >> n;
vector<int> a(n);
vector<int> b(n);
for (int &x : a) cin >> x;
for (int &x : b) cin >> x;
vector<int> left(n, INT32_MIN), right(n, INT32_MAX);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) continue;
if ((a[i] < b[j] ) || b[i] > a[j]) continue;
if (j < i) left[i] = max(left[i], j);
else right[i] = min(right[i], j);
}
}
int q;
cin >> q;
vector<vector<pi>> queryR(n);
for (int i = 0; i < q; i++) {
int l, r;
cin >> l >> r;
l--;
r--;
queryR[r].push_back({l, i});
}
vector<bool> res(q, false);
vi c(n);
for (int i = 0; i < n; i++) c[i] = left[i];
for (int r = 0; r < n; r++) {
for (int i = 0; i < n; i++) {
if (right[i] == r) c[i] = INT32_MAX;
}
for (pi p : queryR[r]) {
int l, i;
tie(l, i) = p;
int mn = *min_element(c.begin() + l, c.begin() + r + 1);
cerr << mn << endl;
res[i] = mn >= l;
}
}
for (bool b : res) {
cout << (b ? "Yes" : "No") << '\n';
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
}