#include using std::cin; using std::cout; using std::vector; using ll=long long; #define endl "\n"; const int INF=INT_MAX; //セグ木 struct Segtree{ int N; vector node; Segtree(int n){ N=1; while(N=N-1) return l; int left_ind=lower_bound(left,val,now*2+1,l,(l+r)/2); if(left_ind==(l+r)/2) return lower_bound(left,val,now*2+2,(l+r)/2,r); return left_ind; } }; const int max=3e5,inf=1e9; int main(){ //入力、宣言 int N; cin>>N; assert(1<=N&&N<=max); vector X(N); std::set set; for(int i=0;i>X[i]; assert(1<=X[i]&&X[i]<=inf); assert(!set.count(X[i])); set.insert(X[i]); } int Q; cin>>Q; assert(1<=Q&&Q<=max/3); vector l(Q),r(Q),x(Q),ans(Q,inf); for(int i=0;i>l[i]>>r[i]>>x[i]; assert(1<=l[i]&&l[i]<=r[i]&&r[i]<=N&&x[i]<=inf&&1<=x[i]); l[i]--; r[i]--; } //本題。1 回目では x≤X_i を満たすものについて、2 回目では x≥X_i を満たすものについて求めている。 for(int _=0;_<2;_++){ //座圧 vector comp(N),rev(N); { vector> memo(N); for(int i=0;i> left(N),ind(N); for(int i=0;i