1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
   | #include<iostream> #include<cstring> #include<stdio.h> #include<algorithm> using namespace std; #define rep(i,a,n) for(int i=(a);i<(n);i++) #define per(i,a,n) for(int i=(n-1);i>=(a);i--) #define fi first #define se second typedef pair <int,int> pII; typedef long long ll; const int INF = 0x3f3f3f3f;
  const int maxn = 5e4 + 10; int n,q; int st[maxn][32-__builtin_clz(maxn)]; int st2[maxn][32-__builtin_clz(maxn)]; int h[maxn]; int ST(){     int l = 31 - __builtin_clz(n);     rep(i,0,n) {st[i][0] = h[i];st2[i][0] = h[i];}     rep(j,0,l) rep(i,0,n-(1<<j)+1){         st[i][j+1] = max(st[i][j],st[i+(1<<j)][j]);         st2[i][j+1] = min(st2[i][j],st2[i+(1<<j)][j]);     } } int max_rmq(int l,int r){     int k = 31 - __builtin_clz(r-l+1);     return max(st[l][k],st[r-(1<<k)+1][k]); } int min_rmq(int l,int r){     int k = 31 - __builtin_clz(r-l+1);     return min(st2[l][k],st2[r-(1<<k)+1][k]); } int main(){ #ifdef LOCAL     freopen("shui.in","r",stdin); #endif     while(~scanf("%d%d",&n,&q)){     rep(i,0,n) scanf("%d",&h[i]);     ST();     while(q--){         int l,r;scanf("%d%d",&l,&r);         l--,r--;         printf("%d\n",max_rmq(l,r)-min_rmq(l,r));     }     }     return 0; }
 
   |