#include using namespace std; using ll = long long; using pll = pair; #define drep(i, cc, n) for (ll i = (cc); i <= (n); ++i) #define rep(i, n) drep(i, 0, n - 1) #define all(a) (a).begin(), (a).end() #define pb push_back #define fi first #define se second const ll MOD = 1000000007; const ll MOD2 = 998244353; const ll INF = 1LL << 60; const ll MAX_N = 2e5; struct SegmentTree{ ll n; vector dat; SegmentTree(ll n_){ n = 1; while(n < n_) n*=2; dat.resize(2*n, 0); } void update(ll k, ll a){ k += n-1; dat[k] += a; while(k > 0){ k = (k-1)/2; dat[k] = min(dat[2*k+1], dat[2*k+2]); } } // the minimun element of [a, b) ll query(ll a, ll b){return query_sub(a, b, 0, 0, n);} ll query_sub(ll a, ll b, ll k, ll l, ll r){ if(r <= a || b <= l){ return INF; }else if(a <= l && r <= b){ return dat[k]; }else{ ll vl = query_sub(a, b, 2*k+1, l, (l+r)/2); ll vr = query_sub(a, b, 2*k+2, (l+r)/2, r); return min(vl, vr); } } }; int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); ll n; cin >> n; vector> ope(n); priority_queue, vector>, greater>> PQ; rep(i, n){ ll l, r, a; cin >> l >> r >> a; l--; r--; PQ.push({l, 0, a}); PQ.push({r, 2, a}); } sort(all(ope)); ll q; cin >> q; rep(i, q){ ll x; cin >> x; x--; PQ.push({x, 1, i}); } vector ans(q); SegmentTree ST(n); for(ll i=0; i(PQ.top()); if(t==0){ ll l = get<0>(PQ.top()); ll a = get<2>(PQ.top()); if(a < n){ ST.update(a, n); } }else if(t==1){ ll x = get<0>(PQ.top()); ll idx = get<2>(PQ.top()); ll v = ST.query(0, n); if(v >= n){ ans[idx]=n; }else{ ans[idx]=v; } }else if(t==2){ ll r = get<0>(PQ.top()); ll a = get<2>(PQ.top()); if(a < n){ ST.update(a, -n); } } PQ.pop(); } rep(i, q) cout << ans[i] << endl; }