```cpp
#include<cstdio>
#include<iostream> using   namespace   std; int   f[100005][50],g[100005][50],LOG2[100005],POW2[100005],p; int   query(  int   l,  int   r) {       p=LOG2[r-l+1];       return   (max(f[l][p],f[r-POW2[p]+1][p])-min(g[l][p],g[r-POW2[p]+1][p])); } int   main() {       int   n,q,a;       scanf  (  "%d%d"  ,&n,&q);       for  (  int   i=1;i<=n;i++)       {                     scanf  (  "%d"  ,&a);           f[i][0]=a;           g[i][0]=a;       }       LOG2[1]=0;       int   i,j;       for  (i=2;i<=n;i++)       {           LOG2[i]=LOG2[i/2]+1;       }       POW2[0]=1;       for  (i=1;i<=LOG2[n];i++)       {           POW2[i]=POW2[i-1]*2;        }       for  (j=1;j<=LOG2[n];j++)       {           for  (i=1;(i+POW2[j-1])<=n;i++)           {               f[i][j]=max(f[i][j-1],f[i+POW2[j-1]][j-1]);               g[i][j]=min(g[i][j-1],g[i+POW2[j-1]][j-1]);           }       }       int   x,y;       for  (i=1;i<=q;i++)       {           x,y;           scanf  (  "%d%d"  ,&x,&y);           printf  (  "%d\n"  ,query(x,y));       }       return   0; } ```



 京公网安备 11010502036488号
京公网安备 11010502036488号