#include<iostream> #include<cmath> using namespace std; const int maxn=1e5+10; int a[maxn]; int st[maxn][50]; int ST[maxn][50]; int quick(int a,int n) { int ans=1; while(n) { if(n&1) ans*=a; a=a*a; n>>1; } return ans; } int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=n;i>=1;i--) { for(int j=0;i+(1<<j-1)-1<=n;j++) { if(j==0) { st[i][j]=a[i]; ST[i][j]=a[i]; } else { st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]); ST[i][j]=min(ST[i][j-1],ST[i+(1<<j-1)][j-1]); } } } //cout<<n<<m<<endl; while(m--) { int l,r; cin>>l>>r; //int k=log(r-l+1); int k=0; while(l+(1<<(k+1))<=r+1) k++; int a=max(st[l][k],st[r-(1<<k)+1][k]); int b=min(ST[l][k],ST[r-(1<<k)+1][k]); cout<<a-b<<endl; } return 0; }
原文地址:https://www.cnblogs.com/Andromeda-Galaxy/p/10573915.html
时间: 2024-10-17 03:26:14