/* Problem URL: https://codeforces.com/problemset/problem/1859/D */ #include #include #include using namespace std; using namespace __gnu_pbds; template > using ordered_set = tree; #define V vector #define rmin(a, b) a = min(a, b) #define rmax(a, b) a = max(a, b) #define rep(i, lim) for (int i = 0; i < (lim); i++) #define nrep(i, s, lim) for (int i = s; i < (lim); i++) #define repv(i, v) for (auto &i : (v)) #define fillv(v) for (auto &itr_ : (v)) { cin >> itr_; } #define sortv(v) sort(v.begin(), v.end()) #define all(v) (v).begin(), (v).end() using vi = vector; using vvi = vector; using vvvi = vector; using vvvvi = vector; using ll = long long; using vl = vector; using vvl = vector; using vvvl = vector; using vvvvl = vector; template auto operator<<(ostream &os, const vector &vec)->ostream& { os << vec[0]; for (size_t i = 1; i < vec.size(); i++) { os << ' ' << vec[i]; } os << '\n'; return os; } template auto operator>>(istream &is, vector &vec)->istream& { for (auto &i : vec) { is >> i; } return is; } template auto operator<<(ostream &os, const vector> &vec)->ostream& { for (auto &i : vec) { os << i[0]; for (size_t j = 1; j < i.size(); j++) { os << ' ' << i[j]; } os << '\n'; } return os; } template auto operator>>(istream &is, vector> &vec)->istream& { for (auto &i : vec) { for (auto &j : i) { is >> j; } } return is; } const int oo = INT32_MAX >> 1; const ll OO = INT64_MAX >> 1; void pre() { } #define TEST 1 void solve() { int n; cin >> n; V> ev; V> act(n); rep(i, n) { ll l, r, a ,b; cin >> l >> r >> a >> b; ev.emplace_back(a, 0, i); ev.emplace_back(b, 1, i); ev.emplace_back(l - 1, 2, i); act[i] = {l, r, a, b}; } sort(all(ev), greater<>()); vl best(n); rep(i, n) { best[i] = act[i][3]; } V> all; multiset el; for (auto [p, t, i] : ev) { if (t == 1) { el.insert(p); continue; } if (t == 2) { all.emplace_back(act[i][0], act[i][3], best[i]); el.erase(act[i][3]); continue; } if (t == 0) { if (el.empty()) { continue; } rmax(best[i], *prev(el.end())); } } sort(all(all), [&](tuple &i, tuple &j){ auto [li, ri, bi] = i; auto [lj, rj, bj] = j; if (li == lj) { return ri < rj; } return li < lj; }); V> v; auto [l, r, b] = all[0]; nrep(i, 1, all.size()) { auto [lu, ru, bu] = all[i]; if (lu <= r && l <= ru) { rmax(b, bu); rmin(l, lu); rmax(r, ru); continue; } v.emplace_back(l, r, b); l = lu; r = ru; b = bu; } v.emplace_back(l, r, b); int q; cin >> q; while (q--) { ll x; cin >> x; auto itr = upper_bound(all(v), tuple(x, 1e9, 1e9)); if (itr == v.begin()) { cout << x << ' '; continue; } itr--; auto [l, r, b] = *itr; if (r >= x) { cout << max(x, b) << ' '; continue; } cout << x << ' '; } cout << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); pre(); int t; (TEST && cin >> t) || (t = 1); while (t--) { solve(); } }