Загрузка данных


//#pragma GCC optimize("O3")
//#define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
using namespace std;
// using ll = __int128;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
int main() {
    ios_base::sync_with_stdio(false);
    cout.tie(nullptr); cin.tie(nullptr);
    ll n; cin >> n;
    vector<ll> h(n, 0);
    for (int i = 0; i < n; i++) cin >> h[i];
    vector<vector<ll>> gr(n, vector<ll> (0, 0));
    for (int i = 0; i < n; i++) {
        ll up = -1e18;
        ll down = 1;
        for (int j = i + 1; j < n; j++) {
            ll x = j - i;
            ll y = h[j] - h[i];
            if (y * down >= up * x) {
                gr[i].push_back(j);
                up = y;
                down = x;
            }
        }
    }
    int q; cin >> q;
    vector<ll> dist(n, 1e18);
    for (int i = 0; i < q; i++) {
        int l, r; cin >> l >> r; l--; r--;
        fill(dist.begin(), dist.end(), 1e18);
        dist[l] = 0;
        for (int j = l; j < r; j++) {
            if (dist[j] == 1e18) continue;
            for (auto u : gr[j]) {
                dist[u] = min(dist[u], dist[j] + 1);
            }
        }
        cout << dist[r] << '\n';
    }
}