0
点赞
收藏
分享

微信扫一扫

ST表

ST表

在\(O(30*n)\)的复杂度内建ST表

int n;  cin>>n;
for(int i=1;i<=n;++i)
cin>>a[i];
for(int i=1;i<=n;++i)
st[i][0]=a[i];
for(int j=1;j<=30;++j)
for(int i=1;i<=n;++i)
if(i+(1<<(j-1))<=n)
st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);

查询复杂度为\(O(log(n))\)

int query(int l,int r){
int len=log2(r-l+1);
return max(st[l][len],st[r-(1<<len)+1][len]);
}

模板求的是区间最大值,如果需要求最小值,只需要把​​max()​​​改为​​min()​​即可。

CAD加油!欢迎跟我一起讨论学习算法,


举报

相关推荐

0 条评论