st函数--区间最大最小值
2015-07-21 20:28
190 查看
st函数可以处理区间的最大和最小值的问题,预处理时间需要
O(nlgn)的时间,查询时间可以达到O(1)。
O(nlgn)的时间,查询时间可以达到O(1)。
void make_st()//st预处理 { for(int i = 1;i <= n;i++){ minn[i][0] = ori[i]; maxx[i][0] = ori[i]; } for(int j = 1;(1 << j) <= n;j++)//递推求区间最大最小 for(int i = 1;i + (1 << j) - 1 <= n;i++) { minn[i][j] = min(minn[i][j - 1],minn[i + (1 << (j - 1))][j - 1]); maxx[i][j] = max(maxx[i][j - 1],maxx[i + (1 << (j - 1))][j - 1]); } } int query_max(int l,int r)//O(1)查询 { int k = 0; while((1 << (k + 1)) <= r - l + 1)k++; return max(maxx[l][k],maxx[r - (1 << k) + 1][k]); } int query_min(int l,int r) { int k = 0; while((1 << (k + 1)) <= r - l + 1)k++; return min(minn[l][k],minn[r - (1 << k) + 1][k]); }
相关文章推荐
- 算法之动态规划
- java中自动生成编码,例如18位,20位等
- JAVA从入门到精通书中ZIP压缩和解压缩错误修正
- 构造函数沉思录
- HDU 4548 美素数【树状数组+筛法求素数】
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- Redis缓存
- 爱奇艺视频
- 关于java的基础--基本数据类型以及循环
- POJ 1019 Number Sequence 解读
- java JDBC 万能DAO的实现的补充 实现了增删查改
- Brackets Sequence 括号DP
- iOS开发-使用第三方库AFNetWorking解析JSON和XML数据
- 中介者模式 - 行为模式
- 结构体字节对齐
- nova boot, reboot, suspend 工作流
- Android 关于定位
- app名字国际化与字符串国际化
- PHP简单传表单
- Quartz 定时任务设置某个时间区间每隔一定时间触发的cron表达式