对于RMQ这种静态最值询问, 用线段树的话查询过慢, 一般用ST表预处理后O(1)查询, 下以最大值查询为例, 这里假定$n$不超过5e5

void init(int *a, int n) {
Log[0] = -1;
REP(i,1,n) f[0][i] = a[i], Log[i]=Log[i>>1]+1;
REP(j,1,19) for (int i=0;i+(1<<j-1)-1<=n; ++i) {
f[j][i] = max(f[j-1][i],f[j-1][i+(1<<j-1)]);
}
}
int RMQ(int l, int r) {
if (l>r) return -INF;
int t = Log[r-l+1];
return max(f[t][l],f[t][r-(1<<t)+1]);
}

若需要求最大值的下标, 可以这样写

void init(int *a, int n) {
Log[0]=-1;
REP(i,1,n) f[0][i] = i, Log[i]=Log[i>>1]+1;
REP(j,1,19) for (int i=0; i+(1<<j)-1<=n; i++) {
int x = f[j-1][i], y = f[j-1][i+(1<<(j-1))];
f[j][i]=a[x]>a[y]?x:y;
}
}
int RMQ(int l, int r) {
if (l>r) return -1;
int k = Log[r-l+1];
int x = f[k][l], y = f[k][r-(1<<k)+1];
return a[x]>a[y]?x:y;
}

最新文章

  1. ASP.NET Core 数据保护(Data Protection)【上】
  2. ReactJS入门(四)—— 组件API
  3. Android 适配2
  4. ios开发人员北京,上海,深圳的工资待遇是多少?
  5. 异步编程之Promise(2):探究原理
  6. Objective-C 【self的用法】
  7. jquery处理textarea中的手动换行
  8. oracle解锁表
  9. Web中的性能优化
  10. 为何我会喜欢封闭的apple?
  11. Awesome Big Data List
  12. window.open 打开全屏窗口
  13. 批量运维SQl生成,可以用EXCEl,也可以SQL查询生成
  14. CSS3实现背景透明文字不透明
  15. LVM快照备份与恢复
  16. Subversion1.8源码安装流程
  17. [总结]多项式类数学相关(定理&amp;证明&amp;板子)
  18. vs2017安装cuda9.0编译默认示例失败解决方法
  19. Burpsuite-Intruder-xssValidator(XSS检测)基础学习
  20. Java多线程(四) —— 线程并发库之Atomic

热门文章

  1. python练习题-写一个函数,打印所有包含copy方法的内置对象
  2. js 操作数字类型
  3. mysql修改Truncated incorrect DOUBLE value:
  4. bzoj1056/1862 [Zjoi2006]GameZ游戏排名系统
  5. MySQL Crash Course #15# Chapter 23. Working with Stored Procedures
  6. MySQL Crash Course #13# Chapter 21. Creating and Manipulating Tables
  7. Python入门之Python Colorama模块
  8. 第一个c++泛型函数(即模板)
  9. Delphi XE5 for Android (七)
  10. Python3基础 file read 读取txt文件的前几个字符