模板——RMQ
就是模板
#include <cstdio> #include <cstring> #include <iostream> using namespace std; const int maxn=2000; int mx[maxn][20],mi[maxn][20]; int a[maxn]; int n,m; int rmq(int l,int r) { int k=0; while(1<<k+1<=r-l+1) k++; int ans1=max(mx[l][k],mx[r-(1<<k)+1][k]); int ans2=min(mi[l][k],mi[r-(1<<k)+1][k]); return ans1-ans2; } void RMQ() { for(int i=1;i<=n;i++) mi[i][0]=mx[i][0]=a[i]; for(int j=1;1<<j<=n;j++) for(int i=1;i+(1<<j)<=n;i++) mx[i][j]=max(mx[i][j-1],mx[i+(1<<j-1)][j-1]), mi[i][j]=min(mi[i][j-1],mi[i+(1<<j-1)][j-1]); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); RMQ(); for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); printf("%d\n",rmq(x,y)); } return 0; }