基础知识
时间复杂度:预处理:O(nlogn)
:每次查询:O(1)
ST表是用于解决可重复贡献问题的数据结构,采用了倍增的思想,需要用dp
可重复贡献:同样的输入元素可以输入多次,但是对结果不会有影响
代码实现
求最大值:
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1];
完整代码:
void build(){
for(int i=1;i<=n;i++){
dp[i][0]=a[i];
}
for(int j=1;(1<<j)<=n;j++){
for(int i=1;i+(i<<j)-1<=n;i++){
f[i][j]=max(f[i][j-1],f[i][i+(1<<(j-1))][j-1]);
}
}
}
void Find(int l,int r){
int k=log2(r-l+1);
ans=max(f[l][k],f[r-(1<<k)+1][k]);
}
int main(){
}
初始化让长度是1的最大值是他本身
for(int i=1;i<=n;i++){
int t;
cin>>t;
f[i][0]=t;
}