st表
Posted beiyueya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了st表相关的知识,希望对你有一定的参考价值。
一,预习
1,st表类似于线段树和树状数组,用来解决区间最值查询问题。
2,查询的时间复杂度为o(1).
3,假设你有一个有n个数的数组a[n],简单的结构是st[n][t]表示的是从a[n]中第n个数开始,长度为2^t的最大值。(我也感觉有点..)
4,我确实看懂了st表的预处理。
(https://blog.csdn.net/Mercury_Lc/article/details/84841527)这人的网址,我记录网址的意思是你记得给人家评论一下。
5,敲模板。
你对它内涵的深刻理解也算。
你对它形式的深刻理解也算。
1 int st[n][t]; 2 int a[n]; 3 for(int i=1;i<=n;i++) st[i][0]=a[i]; 4 int t=log(n)/log(2)+1; 5 for(int j=1;j<t;j++) 6 for(int i=1;i<=n-2^t+1;i++) 7 f[i][j]=max(f[i][j-1],f[i+2^(j-1)][j-1]);
一般是三遍,为什么是三遍了,一般生,二遍熟,三遍用脑子过一下就可以。
6,应用。
7,这个要是错了的话,你一定要注意边界...给它多加个1.
1 int query(int x,int y) 2 { 3 int t=log(abs(y-x+1))/log(2); 4 int a=f[x][t]; 5 int b=f[x+2^(t-1)+1][t];//int b=f[y-2^(t-1)][t];//之前就是没加1我调了半个小时 6 return max(a,b); 7 }
就这样先吧
8,这个东西比较重要的地方在于边界!
以上是关于st表的主要内容,如果未能解决你的问题,请参考以下文章