sq表

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
int dp[50005][31][2];
int main()
{
    ios::sync_with_stdio(false);
    int n,m;cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>dp[i][0][0];
        for(int j=0;j<=30;j++)
            dp[i][0][1]=100000000;
        dp[i][0][1]=dp[i][0][0];
    }
    for(int j=1;j<=30;j++)
        for(int i=1;i+(1<<j)<=n+1;i++){
            dp[i][j][0]=min(dp[i][j-1][0],dp[i+(1<<(j-1))][j-1][0]);
            dp[i][j][1]=max(dp[i][j-1][1],dp[i+(1<<(j-1))][j-1][1]);
        }
    while(m--){
        int l,r;
        cin>>l>>r;
        int k=log2(r-l+1);
        cout<<max(dp[l][k][1],dp[r-(1<<k)+1][k][1])-min(dp[l][k][0],dp[r-(1<<k)+1][k][0])<<"\n";
    }
}

  

上一篇:inline内联函数


下一篇:Golang中的接口