#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(x, s, t) for(llint (x) = (s); (x) <= (t); (x)++) #define chmin(x, y) (x) = min((x), (y)) #define chmax(x, y) (x) = max((x), (y)) #define all(x) (x).begin(),(x).end() #define inf 1e18 #define mod 1000000007 using namespace std; typedef long long llint; typedef long long ll; typedef pair P; struct SegTree{ int size; vector > seg; SegTree(){} SegTree(int size){ this->size = size; seg.resize(1<<(size+1)); } void init() { for(int i = 0; i < (1<<(size+1)); i++) sort(all(seg[i])); } void update(int i, llint val) { i += (1 << size); seg[i].push_back(val); while(i > 1){ i /= 2; seg[i].push_back(val); } } llint query(int a, int b, int k, int l, int r, llint x) { if(b < l || r < a) return inf; if(a <= l && r <= b){ llint ret = inf; int p = lower_bound(all(seg[k]), x) - seg[k].begin(); if(p < seg[k].size()) chmin(ret, abs(seg[k][p] - x)); if(p > 0) chmin(ret, abs(seg[k][p-1] - x)); return ret; } llint lval = query(a, b, k*2, l, (l+r)/2, x); llint rval = query(a, b, k*2+1, (l+r)/2+1, r, x); return min(lval, rval); } llint query(int a, int b, ll x) { return query(a, b, 1, 0, (1<> n; rep(i, 1, n){ cin >> x[i]; seg.update(i, x[i]); } seg.init(); cin >> Q; ll l, r, x; rep(i, 1, Q){ cin >> l >> r >> x; cout << seg.query(l, r, x) << "\n"; } flush(cout); return 0; }