/* Name: Author: xiaruize Date: */ #include<bits/stdc++.h> usingnamespace std; #define int long long #define ull unsigned long long #define ALL(a) (a).begin(), (a).end() #define pb push_back #define mk make_pair #define pii pair<int, int> #define pis pair<int, string> #define sec second #define fir first #define sz(a) int((a).size()) #define rep(i, x, y) for (int i = x; i <= y; i++) #define repp(i, x, y) for (int i = x; i >= y; i--) #define Yes cout << "Yes" << endl #define YES cout << "YES" << endl #define No cout << "No" << endl #define NO cout << "NO" << endl #define debug(x) cerr << #x << ": " << x << endl #define double long double constint INF = 0x3f3f3f3f; constint MOD = 1000000007; constint N = 2e5 + 10;
// bool st; int t; int n; int a[N], b[N]; int m; int c[N]; int f[N][22]; map<int, int> mp, cnt, sum; // bool en;
voidrmq_init() { for (int i = 1; i <= n; i++) f[i][0] = b[i]; int k = 20; for (int j = 1; j <= k; j++) for (int i = n; i >= 1; i--) { if (i + (1 << (j - 1)) <= n) f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]); } }
intrmq(int i, int j) { int k = log2(j - i + 1); returnmax(f[i][k], f[j - (1 << k) + 1][k]); }
voidsolve() { mp.clear(); cnt.clear(); sum.clear(); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) cin >> b[i]; rmq_init(); cin >> m; for (int i = 1; i <= m; i++) { cin >> c[i]; sum[c[i]]++; } for (int i = 1; i <= n; i++) { if (a[i] < b[i]) { NO; return; } } for (int i = 1; i <= n; i++) { if (a[i] == b[i]) continue; if (!mp[b[i]]) mp[b[i]] = i; else { int l = mp[b[i]];//上一个同样的值 int x = rmq(l, i);//区间最大值 if (x > b[i])//不能共用 cnt[b[i]]++; mp[b[i]] = i; } } for (auto v : mp) { if (v.sec) cnt[v.fir]++; }//最后一段没有统计 for (auto v : cnt) { if (sum[v.fir] < v.sec) { NO; return; } } YES; }