func_code_string: #include <bits/stdc++.h>   #pragma GCC target(         sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native )   #pragma GCC optimize( unroll-loops )   #pragma GCC optimize( fast-math )   using namespace std;   mt19937 rnd(time(0) + 228 +  k  +  e  +  k  +  e  +  r  +  o  +  f  +  e  +                y );   vector<int> genvec(int sz, int minelem, int maxelem) {     ++maxelem;     vector<int> ans(sz);     for (int i = 0; i < sz; ++i) {       ans[i] = minelem + rnd() % (maxelem - minelem);     }     return ans;   }   const long double EPS = 1e-14;   bool checkprime(int x) {     for (int i = 2; i * i <= x; ++i)       if (x % i == 0) return 0;     return 1;   }   const long double PI = acos(-1);   const int MOD7 = 1000000007;   const int MOD9 = 1000000009;   const long long INF = 2e18;   int mod = MOD7;   const int inf = 1e9;   signed main() {     ios_base::sync_with_stdio(0);     cout.tie(0);     cin.tie(0);     srand(time(NULL));     int t;     cin >> t;     while (t--) {       int n;       cin >> n;       vector<int> p(2 * n);       for (long long i = 0; i < p.size(); ++i) cin >> p[i];       ;       int mx = 0;       vector<int> luls;       int cnt = 0;       for (int i : p) {         if (i > mx) {           mx = i;           if (cnt) luls.push_back(cnt);           cnt = 1;         } else {           ++cnt;         }       }       luls.push_back(cnt);       vector<bool> dp(n + 1);       dp[0] = 1;       int ps = 0;       for (int i : luls) {         ps += i;         for (int sum = n; sum >= 0; --sum) {           if (!dp[sum]) continue;           if (ps - sum - i > n) continue;           if (sum + i <= n) {             dp[sum + i] = 1;           }         }       }       cout << (dp[n] ?  YES  :  NO ) << endl;     }   }   