func_code_string: #include <bits/stdc++.h>   using namespace std;   int main() {   #ifdef LOCAL     freopen( ../IO/d.in ,  r , stdin);   //  freopen( ../IO/d.out ,  w , stdout);   #else     std::ios_base::sync_with_stdio(false);     std::cin.tie(nullptr);     std::cout.tie(nullptr);   #endif     int number_of_tests;     cin >> number_of_tests;        while (number_of_tests--) {       int n;       cin >> n;       std::vector<int> b(n);       std::vector<int> used(2 * n);       for (int &i : b) cin >> i, --i, used[i] = 1;       std::vector<int> unused;       unused.reserve(n);       for (int i = 0; i < 2 * n; ++i) {         if (!used[i]) unused.push_back(i);       }       vector<int> c(n + 1, true);       int l = -1, r = -1;       auto check1 = [&](int x) {         deque<int> dq(unused.begin(), unused.end());         bool ok = true;         for (int i = x - 1; i >= 0; --i) {           ok &= b[i] < dq.back();           dq.pop_back();         }         return ok;       };       auto check2 = [&](int x) {         deque<int> dq(unused.begin(), unused.end());         bool ok = true;         for (int i = x; i < n; ++i) {           ok &= b[i] > dq.front();           dq.pop_front();         }         return ok;       };       int lo = -1, hi = n + 1;       while (hi - lo > 1) {         int x = (lo + hi) / 2;         if (check1(x)) {           lo = x;         } else {           hi = x;         }       }       l = 0, r = lo;       lo = -1, hi = n + 1;       while (hi - lo > 1) {         int x = (lo + hi) / 2;         if (check2(x)) {           hi = x;         } else {           lo = x;         }       }       l = std::max(l, hi);   //    std::cout << l <<     << r <<   n ;       std::cout << std::max(0, r - l + 1) <<   n ;     }     return 0;   }         