范围最小值问题:

提供操作:

  1. Query(L,R):计算min{AL ~ AR }

Sparse-Table算法:

定义d[i][j]为从i开始长度为2j的一段元素的最小值。所以可以用递推的方法表示。

预处理RMQ_init如下(感觉像区间DP):

 int RMQ_init(const vector<int>& A){
int n=A.size();
for(int i=;i<n;i++) d[i][] = A[i];
for(int j=;(<<j)<=n;j++)
for(int i=;i+(<<j)-<n;i++)
d[i][j]=min(d[i][j-],d[i+(<<(j-))][j-]);
}

询问回值RMQ如下:

int RMQ(int L,int R){
int k=;
while((<<(k+))<=R-L+) k++;
return min(d[L][k],d[R-(<<k)+][k]);
//左右结点均覆盖确保不遗漏
}

作者所给模板:

 struct RMQ {
int d[maxn][maxlog];
void init(const vector<int>& A) {
int n = A.size();
for(int i = ; i < n; i++) d[i][] = A[i];
for(int j = ; (<<j) <= n; j++)
for(int i = ; i + (<<j) - < n; i++)
d[i][j] = max(d[i][j-], d[i + (<<(j-))][j-]);
} int query(int L, int R) {
int k = ;
while((<<(k+)) <= R-L+) k++; // 如果2^(k+1)<=R-L+1,那么k还可以加1
return max(d[L][k], d[R-(<<k)+][k]);
}
};

练习题目:UVa 11235

链接:

最新文章

  1. C#设计模式-备忘录模式
  2. SIHA环境修改主机名实施步骤
  3. wampserver下修改mysql root用户的登录密码
  4. 使用jquery再次封装ajax
  5. RabbitMQ 3.6 安装
  6. node.js 异步式I/O 与事件驱动
  7. AMQP与QPID简介
  8. kafka集群扩容以及数据迁移
  9. POJ 2182 Lost Cows (线段树)
  10. 谈谈字符集编码及gb2312、utf-8编码原理
  11. 2018-2019-2 网络对抗技术 20165304 Exp3 免杀原理与实践
  12. odoo8资料
  13. Android开发中Activity状态的保存与恢复
  14. cProfile——Python性能分析工具
  15. jq塞入不同状态html的写法 switch (defaults.type)
  16. 【Spark】SparkStreaming-foreachrdd foreachpartition
  17. Centos6.9安装JDK1.8
  18. Complex Instance Placement
  19. CentOS7安装OpenStack(Rocky版)-08.启动一个虚拟机实例
  20. 第八章 Mysql运算符

热门文章

  1. HTML5入门5---HTML5控件元素
  2. 开发版本控制git
  3. 234. Palindrome Linked List
  4. Android Navigation Drawer,自定义ActionBar(标题居中)
  5. NET Remoting 示例
  6. 重写hashCode()的方法
  7. Lua for windows中SciTe开启支持python的方法
  8. BZOJ 2299 向量
  9. ios 开发中 developer tools access 总是要输入密码问题的解决
  10. poj 3468 A Simple Problem with Integers (线段树 成段更新 加值 求和)