#include <bits/stdc++.h>
using namespace std;
template <typename T> T& setmin(T& a, T b) { if (b < a) a = b; return a; }
const int INF = 1e9;
const int MAXN = 1.1e5;
const int MAXQ = 3.1e5;
struct seg_node {
vector<int> vals;
int minDiff;
} seg[1<<18];
int A[MAXN];
void build(int i, int l, int r) {
seg[i].vals.reserve(r-l);
if (l+1 == r) {
seg[i].vals.push_back(A[l]);
} else {
int m = (l+r)/2;
build(2*i, l, m);
build(2*i+1, m, r);
merge(seg[2*i].vals.begin(), seg[2*i].vals.end(),
seg[2*i+1].vals.begin(), seg[2*i+1].vals.end(), back_inserter(seg[i].vals));
}
assert(r-l == int(seg[i].vals.size()));
assert(is_sorted(seg[i].vals.begin(), seg[i].vals.end()));
seg[i].minDiff = INF;
for (int z = 0; z+1 < int(seg[i].vals.size()); z++) {
setmin(seg[i].minDiff, seg[i].vals[z+1] - seg[i].vals[z]);
}
}
int query(int i, int l, int r, int ql, int qr) {
if (qr <= l || r <= ql) {
return INF;
} else if (ql <= l && r <= qr) {
return seg[i].minDiff;
} else {
int m = (l+r)/2;
return min(query(2*i, l, m, ql, qr), query(2*i+1, m, r, ql, qr));
}
}
void update(int i, int l, int r, int qr, int v, int& d) {
if (qr <= l) return;
if (l+1 == r) {
setmin(seg[i].minDiff, abs(A[l]-v));
setmin(d, abs(A[l]-v));
} else {
auto it = lower_bound(seg[i].vals.begin(), seg[i].vals.end(), v);
// doesn't optimize
if ((it == seg[i].vals.end() || v+d <= *it) &&
(it == seg[i].vals.begin() || *prev(it) <= v-d)) {
return;
}
int m = (l+r)/2;
update(2*i+1, m, r, qr, v, d);
update(2*i, l, m, qr, v, d);
setmin(seg[i].minDiff, min(seg[2*i].minDiff, seg[2*i+1].minDiff));
}
}
int ans[MAXQ];
int main() {
ios::sync_with_stdio(0), cin.tie(0);
int N; cin >> N;
for (int i = 0; i < N; i++) cin >> A[i];
int Q; cin >> Q;
vector<vector<pair<int, int>>> queries(N);
for (int q = 0; q < Q; q++) {
int l, r; cin >> l >> r; l--, r--;
assert(r >= 1);
queries[r].emplace_back(l, q);
}
build(1, 0, N);
for (int i = 1; i < N; i++) {
int tmp = INF;
update(1, 0, N, i, A[i], tmp);
for (auto it : queries[i]) {
int l = it.first;
int q = it.second;
ans[q] = query(1, 0, N, l, i+1);
}
}
for (int q = 0; q < Q; q++) { cout << ans[q] << '\n'; }
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVCYgc2V0bWluKFQmIGEsIFQgYikgeyBpZiAoYiA8IGEpIGEgPSBiOyByZXR1cm4gYTsgfQoKY29uc3QgaW50IElORiA9IDFlOTsKCmNvbnN0IGludCBNQVhOID0gMS4xZTU7CmNvbnN0IGludCBNQVhRID0gMy4xZTU7CgpzdHJ1Y3Qgc2VnX25vZGUgewoJdmVjdG9yPGludD4gdmFsczsKCWludCBtaW5EaWZmOwp9IHNlZ1sxPDwxOF07CgppbnQgQVtNQVhOXTsKCnZvaWQgYnVpbGQoaW50IGksIGludCBsLCBpbnQgcikgewoJc2VnW2ldLnZhbHMucmVzZXJ2ZShyLWwpOwoJaWYgKGwrMSA9PSByKSB7CgkJc2VnW2ldLnZhbHMucHVzaF9iYWNrKEFbbF0pOwoJfSBlbHNlIHsKCQlpbnQgbSA9IChsK3IpLzI7CgkJYnVpbGQoMippLCBsLCBtKTsKCQlidWlsZCgyKmkrMSwgbSwgcik7CgkJbWVyZ2Uoc2VnWzIqaV0udmFscy5iZWdpbigpLCBzZWdbMippXS52YWxzLmVuZCgpLCAKCQkJCXNlZ1syKmkrMV0udmFscy5iZWdpbigpLCBzZWdbMippKzFdLnZhbHMuZW5kKCksIGJhY2tfaW5zZXJ0ZXIoc2VnW2ldLnZhbHMpKTsKCX0KCWFzc2VydChyLWwgPT0gaW50KHNlZ1tpXS52YWxzLnNpemUoKSkpOwoJYXNzZXJ0KGlzX3NvcnRlZChzZWdbaV0udmFscy5iZWdpbigpLCBzZWdbaV0udmFscy5lbmQoKSkpOwoJc2VnW2ldLm1pbkRpZmYgPSBJTkY7Cglmb3IgKGludCB6ID0gMDsgeisxIDwgaW50KHNlZ1tpXS52YWxzLnNpemUoKSk7IHorKykgewoJCXNldG1pbihzZWdbaV0ubWluRGlmZiwgc2VnW2ldLnZhbHNbeisxXSAtIHNlZ1tpXS52YWxzW3pdKTsKCX0KfQoKaW50IHF1ZXJ5KGludCBpLCBpbnQgbCwgaW50IHIsIGludCBxbCwgaW50IHFyKSB7CglpZiAocXIgPD0gbCB8fCByIDw9IHFsKSB7CgkJcmV0dXJuIElORjsKCX0gZWxzZSBpZiAocWwgPD0gbCAmJiByIDw9IHFyKSB7CgkJcmV0dXJuIHNlZ1tpXS5taW5EaWZmOwoJfSBlbHNlIHsKCQlpbnQgbSA9IChsK3IpLzI7CgkJcmV0dXJuIG1pbihxdWVyeSgyKmksIGwsIG0sIHFsLCBxciksIHF1ZXJ5KDIqaSsxLCBtLCByLCBxbCwgcXIpKTsKCX0KfQoKdm9pZCB1cGRhdGUoaW50IGksIGludCBsLCBpbnQgciwgaW50IHFyLCBpbnQgdiwgaW50JiBkKSB7CglpZiAocXIgPD0gbCkgcmV0dXJuOwoJaWYgKGwrMSA9PSByKSB7CgkJc2V0bWluKHNlZ1tpXS5taW5EaWZmLCBhYnMoQVtsXS12KSk7CgkJc2V0bWluKGQsIGFicyhBW2xdLXYpKTsKCX0gZWxzZSB7CgkJYXV0byBpdCA9IGxvd2VyX2JvdW5kKHNlZ1tpXS52YWxzLmJlZ2luKCksIHNlZ1tpXS52YWxzLmVuZCgpLCB2KTsKCQkvLyBkb2Vzbid0IG9wdGltaXplCgkJaWYgKChpdCA9PSBzZWdbaV0udmFscy5lbmQoKSB8fCB2K2QgPD0gKml0KSAmJiAKCQkJCShpdCA9PSBzZWdbaV0udmFscy5iZWdpbigpIHx8ICpwcmV2KGl0KSA8PSB2LWQpKSB7CgkJCXJldHVybjsKCQl9CgkJaW50IG0gPSAobCtyKS8yOwoJCXVwZGF0ZSgyKmkrMSwgbSwgciwgcXIsIHYsIGQpOwoJCXVwZGF0ZSgyKmksIGwsIG0sIHFyLCB2LCBkKTsKCQlzZXRtaW4oc2VnW2ldLm1pbkRpZmYsIG1pbihzZWdbMippXS5taW5EaWZmLCBzZWdbMippKzFdLm1pbkRpZmYpKTsKCX0KfQoKaW50IGFuc1tNQVhRXTsKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCk7CglpbnQgTjsgY2luID4+IE47Cglmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgY2luID4+IEFbaV07CgoJaW50IFE7IGNpbiA+PiBROwoJdmVjdG9yPHZlY3RvcjxwYWlyPGludCwgaW50Pj4+IHF1ZXJpZXMoTik7Cglmb3IgKGludCBxID0gMDsgcSA8IFE7IHErKykgewoJCWludCBsLCByOyBjaW4gPj4gbCA+PiByOyBsLS0sIHItLTsKCQlhc3NlcnQociA+PSAxKTsKCQlxdWVyaWVzW3JdLmVtcGxhY2VfYmFjayhsLCBxKTsKCX0KCQoJYnVpbGQoMSwgMCwgTik7Cglmb3IgKGludCBpID0gMTsgaSA8IE47IGkrKykgewoJCWludCB0bXAgPSBJTkY7CgkJdXBkYXRlKDEsIDAsIE4sIGksIEFbaV0sIHRtcCk7CgkJZm9yIChhdXRvIGl0IDogcXVlcmllc1tpXSkgewoJCQlpbnQgbCA9IGl0LmZpcnN0OwoJCQlpbnQgcSA9IGl0LnNlY29uZDsKCQkJYW5zW3FdID0gcXVlcnkoMSwgMCwgTiwgbCwgaSsxKTsKCQl9Cgl9CgoJZm9yIChpbnQgcSA9IDA7IHEgPCBROyBxKyspIHsgY291dCA8PCBhbnNbcV0gPDwgJ1xuJzsgfQoKCXJldHVybiAwOwp9Cg==