930
#include<cstdio> #include<cmath> #include<cstring> #include<string> #include<iostream> #include<algorithm> #include<queue> //#define DEBUG const int maxn = 100005; int Max[maxn][17]; int Min[maxn][17]; int num[maxn]; int pow(int a, int n); using namespace std; int main() { #ifdef DEBUG freopen("Text.txt", "r", stdin); #endif // DEBUG cin.tie(0); cin.sync_with_stdio(false); int n, m; cin >> n >> m; int i, j; for (i = 1; i <= n; i++) cin >> num[i]; for (j = 0; pow(2, j) <= n; j++) { for (i = 1;i + pow(2, j) - 1<= n; i++) { if (j == 0) Min[i][j] = Max[i][j] = num[i]; else { Max[i][j] = max(Max[i][j - 1], Max[i + pow(2, j - 1)][j - 1]); Min[i][j] = min(Min[i][j - 1], Min[i + pow(2, j - 1)][j - 1]); } } } int bit, a, b; for (i = 1; i <= m;i++) { cin >> a >> b; bit = (int)(log(b - a + 1.0) / log(2.0)); //cout << max(Max[a][bit], Max[b - pow(2, bit) + 1][bit]) << ends; //cout << min(Min[a][bit], Min[b - pow(2, bit) + 1][bit]) << endl; cout << max(Max[a][bit], Max[b - pow(2, bit) + 1][bit]) - min(Min[a][bit], Min[b - pow(2, bit) + 1][bit]) <<endl; } } int pow(int a, int n) { if (a == 1) return 1; if (a == 2) return 1 << n; int i, copy = 1; for (i = 1; i <= n; i++) copy = copy*a; return copy; }