func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e5 + 10;   const int INF = 0x3f3f3f3f;   int n, m, a[maxn], b[maxn], f[maxn], g[maxn], l[maxn], p[maxn], ans[maxn];   bool vis[maxn];   int main() {     scanf( %d , &n);     for (int i = (1), _end_ = (n); i <= _end_; ++i) scanf( %d , &a[i]);     a[++n] = INF;     scanf( %d , &m);     for (int i = (1), _end_ = (m); i <= _end_; ++i) scanf( %d , &b[i]);     sort(b + 1, b + m + 1);     for (int i = (1), _end_ = (n + 1); i <= _end_; ++i) f[i] = INF;     for (int i = (1), _end_ = (n); i <= _end_; ++i)       if (a[i] != -1) {         int L = 1, R = n, pos = 0;         while (L <= R) {           int Mid = L + R >> 1;           if (f[Mid] < a[i]) {             pos = Mid;             L = Mid + 1;           } else             R = Mid - 1;         }         f[pos + 1] = a[i];         g[pos + 1] = i;         l[i] = pos + 1;         p[i] = g[pos];       } else {         int pos = n;         for (int j = m; j >= 1; --j) {           while (f[pos] >= b[j]) --pos;           f[pos + 1] = b[j];           g[pos + 1] = i;         }       }     for (int len = l[n], pos = n, val = a[n]; len >= 1; --len)       if (a[pos] != -1) {         if (a[p[pos]] != -1) {           pos = p[pos];           val = a[pos];         } else {           int t = lower_bound(b + 1, b + m + 1, val) - b - 1;           vis[t] = true;           pos = p[pos];           val = ans[pos] = b[t];         }       } else {         for (int i = pos - 1; i >= 1; --i)           if (a[i] != -1 && l[i] == len - 1 && a[i] < val) {             pos = i;             val = a[i];             goto Next;           }         for (int i = pos - 1; i >= 1; --i)           if (a[i] == -1) {             int t = lower_bound(b + 1, b + m + 1, val) - b - 1;             vis[t] = true;             pos = i;             val = ans[pos] = b[t];             goto Next;           }       Next:;       }     int pos = 1;     for (int i = (1), _end_ = (n - 1); i <= _end_; ++i)       if (a[i] != -1)         ans[i] = a[i];       else if (!ans[i]) {         while (vis[pos]) ++pos;         ans[i] = b[pos];         ++pos;       }     for (int i = (1), _end_ = (n - 1); i <= _end_; ++i) printf( %d  , ans[i]);     puts(  );     return 0;   }   