<a target=_blank href= "http://poj.org/problem?id=3264" target= "_blank" >http://poj.org/problem?id=3264</a >
Naked RMQ.
/* POJ 3264 RMQ Problem test instructions: a herd of cows tells you height, query the maximum value of an interval height difference: Compare the water, the ST algorithm */#include <iostream> #include <cstdi o> #include <cstdlib> #include <cmath> #include <cstring> #include <vector> #include <set > #include <map> #include <algorithm> #include <sstream> #define EPS 1e-9 #define PI acos ( -1) #define L
Ong Long ll #define M #define N 1010 using namespace std;
const int _max = 5e4 + 10;
int D1[_max][20],d2[_max][20],a[_max];
int minx,maxx,n,q;
void Rmq_init () {for (int i = 0; i < n; + + i) d1[i][0] = d2[i][0] = A[i]; for (int j = 1, (1<<j) <=n;++ j) for (int i = 0;i + (1<<j)-1 < n;++ i) {d1[i][j] = min (d1[i][j-1],d1[
i+ (1<< (j-1))][j-1]);
D2[I][J] = max (d2[i][j-1],d2[i+ (1<< (j-1))][j-1]);
}} void RMQ (int l,int R) {if (l>r) return;
int k = 0;
while ((1<< (k+1)) <= r-l+1) ++k;
Minx = min (d1[l][k],d1[r-(1<<k) +1][k]);
Maxx = Max (d2[l][k],d2[r-(1<<k) +1][k]);
}
int main () {#ifndef Online_judge freopen ("Input.txt", "R", stdin);
#endif//Online_judge while (scanf ("%d%d", &n,&q) ==2) {for (int i = 0; i < n; + + i) scanf ("%d", a+i);
Rmq_init ();
int l,r;
while (q--) {scanf ("%d%d", &l,&r);
RMQ (L-1,R-1);
printf ("%d\n", Maxx-minx);
}} return 0;
}