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加油!欢迎跟我一起讨论学习算法,QQ:1401650042