#include <bits/stdc++.h>
using namespace std;
int maxn[10000][15];
int search(int l, int r){
int k = log2(r-l+1);
return max(maxn[l][k],maxn[r-(1<<k)+1][k]);
}
int main()
{
int n; cin >> n;
for(int i=1; i<=n; i++){
cin >> maxn[i][0];
}
for(int j=1; j<=20; j++){
for(int i=1; i+(1<<j)-1<=n; i++){
maxn[i][j]=max(maxn[i][j-1],maxn[i+(1<<(j-1))][j-1]);
}
}
return 0;
}
作用:以O(1)时间复杂度查询区间的最大值,以O(n*logn)的时间复杂度存储区间的最大值。