Advertisement
LEGEND2004

ohh

Jan 3rd, 2023
952
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef long double ld;
  6. //#define int ll
  7. //#define double ld
  8. #define _FastIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  9. #define pii pair<int , int>
  10. #define pb emplace_back
  11. //#define endl '\n'
  12. #define all(x) (x).begin() , (x).end()
  13. #define rall(x) (x).rbegin() , (x).rend()
  14. #define F first
  15. #define S second
  16. const int mod = 1e9 + 7;
  17. const int MAXX = 2e5 + 15;
  18. const int N = 1e6;
  19. const int INF = 1e18 + 123;
  20.  
  21. int t , n , m , g , pos , ind , h , l;
  22. int a[MAXX];
  23. int b[MAXX];
  24. int x[MAXX];
  25. map<int , int> cnt;
  26.  
  27. int main()
  28. {
  29.     _FastIO;
  30.     scanf("%d" , &t);
  31.     while(t--){
  32.         scanf("%d" , &n);
  33.         for(int i = 1; i <= n; i++){
  34.             scanf("%d" , &a[i]);
  35.         }
  36.         for(int i = 1; i <= n; i++){
  37.             scanf("%d" , &b[i]);
  38.         }
  39.         scanf("%d" , &m);
  40.         vector<int> v;
  41.         vector<int>::iterator op;
  42.         for(int i = 0; i < m; i++){
  43.             scanf("%d" , &x[i]);
  44.             if(!cnt[x[i]])
  45.                 v.pb(x[i]);
  46.             cnt[x[i]]++;
  47.         }
  48.         sort(rall(v));
  49.         bool ok = true;
  50.         for(int i = 1; i <= n; i++){
  51.             if(a[i] < b[i]){
  52.                 ok = false;
  53.                 break;
  54.             }
  55.             if(a[i] == b[i])
  56.                 continue;
  57.             if(!cnt[b[i]]){
  58.                 ok = false;
  59.                 break;
  60.             }
  61.         }
  62.         if(!ok){
  63.             for(int i = 0; i < m; i++){
  64.                 cnt[x[i]] = 0;
  65.             }
  66.             printf("NO");
  67.             putchar('\n');
  68.             continue;
  69.         }
  70.         multiset<pair<int , int> > ms;
  71.         multiset<pair<int , int> >::iterator it;
  72.         multiset<int> used;
  73.         multiset<int>::iterator orr;
  74.         used.insert(0);
  75.         for(int i = 1; i <= n; i++){
  76.             if(b[i] > v[0]){
  77.                 used.insert(i);
  78.             }
  79.         }
  80.         used.insert(n + 1);
  81.         for(int i = 1; i <= n; i++){
  82.             if(b[i] < a[i])
  83.                 ms.insert({b[i] , i});
  84.             if(b[i] == a[i])
  85.                 ms.insert({b[i] , -1});
  86.         }
  87.         for(int k : v){
  88.             set<int> myset;
  89.             vector<int> ox;
  90.             while(!ms.empty()){
  91.                 it = ms.end();
  92.                 it--;
  93.                 g = it->F;
  94.                 ind = it->S;
  95.                 if(ind == -1){
  96.                     ms.erase(it);
  97.                     ox.pb(ind);
  98.                     continue;
  99.                 }
  100.                 if(g == k){
  101.  
  102.                     ms.erase(it);
  103.                     orr = used.lower_bound(ind);
  104.                     orr--;
  105.                     ox.pb(ind);
  106.                     h = *orr;
  107.                     myset.insert(h);
  108.                 }else{
  109.                     break;
  110.                 }
  111.             }
  112.             l = (int)myset.size();
  113.             //cout << k << " " << l << endl;
  114.             if(cnt[k] < l){
  115.                 ok = false;
  116.                 break;
  117.             }
  118.             for(int i : ox){
  119.                 used.insert(i);
  120.             }
  121.         }
  122.         for(int i = 0; i < m; i++){
  123.             cnt[x[i]] = 0;
  124.         }
  125.         if(ok){
  126.             printf("YES");
  127.             putchar('\n');
  128.             continue;
  129.         }
  130.         printf("NO");
  131.         putchar('\n');
  132.     }
  133.     return 0;
  134. }
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement