太蒟蒻了,用的线性表,结果 RE 了,求调,悬关!
#include<bits/stdc++.h>
using namespace std;
int n,a[10010],Fmin[10010][22],Fmax[10010][22],ans;
int query(int l,int r){
int k=log2(r-l+1);
int Max=max(Fmax[l][k],Fmax[r-(1<<k)+1][k]);
int Min=min(Fmin[l][k],Fmin[r-(1<<k)+1][k]);
return Max-Min+l-r-1;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) Fmin[i][0]=Fmax[i][0]=a[i];
for(int i=1;i<=n;i++){
for(int j=1;i+(1<<j)-1<=n;j++){
Fmax[i][j]=max(Fmax[i][j-1],Fmax[i+(1<<(j-1))][j-1]);
Fmin[i][j]=min(Fmin[i][j-1],Fmin[i+(1<<(j-1))][j-1]);
cout<<i<<' '<<j<<' '<<Fmax[i][j]<<' '<<Fmin[i][j]<<endl;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
ans=max(ans,query(i,j));
}
}
cout<<ans;
return 0;
}