1. #include<iostream>
  2. #include<cstdio>
  3. #include<string.h>
  4. #include<string>
  5. #include<stack>
  6. #include<set>
  7. #include<algorithm>
  8. #include<cmath>
  9. #include<vector>
  10. #include<map>
  11.  
  12. #define ll __int64
  13. #define lll unsigned long long
  14. #define MAX 1000009
  15. #define eps 1e-8
  16.  
  17. using namespace std;
  18. /*
  19. 二维RMQ模板题
  20. 同一维一样 用dp[row][col][i][j]表示(row,col)到(row+2^i,col+2^j)矩形内的最小值
  21. 查询
  22. */
  23.  
  24. int mapp[][];
  25. int dpmax[][][][];
  26. int dpmin[][][][];
  27. int flag;
  28. void RMQ_init2d(int m, int n)
  29. {
  30. for (int i = ; i <= m; i++)
  31. {
  32. for (int j = ; j <= n; j++)
  33. {
  34. dp[i][j][][] = dpmax[i][j][][] = mapp[i][j];
  35. }
  36. }
  37. int t = log((double)n) / log(2.0);
  38.  
  39. for (int i = ; i <= t; i++)
  40. {
  41. for (int j = ; j <= t; j++)
  42. {
  43. if (i == && j == )
  44. {
  45. continue;
  46. }
  47. for (int row = ; row + ( << i) - <= m; row++)
  48. {
  49. for (int col = ; col + ( << j) - <= n; col++)
  50. {
  51. if (i)
  52. {
  53. dpmax[row][col][i][j] = max(dpmax[row][col][i - ][j], dpmax[row + ( << (i - ))][col][i - ][j]);
  54. dpmin[row][col][i][j] = min(dpmin[row][col][i - ][j], dpmin[row + ( << (i - ))][col][i - ][j]);
  55. }
  56. else
  57. {
  58. dpmax[row][col][i][j] = max(dpmin[row][col][i][j - ], dpmin[row][col + ( << (j - ))][i][j - ]);
  59. dpmin[row][col][i][j] = min(dpmin[row][col][i][j - ], dpmin[row][col + ( << (j - ))][i][j - ]);
  60. }
  61. }
  62. }
  63. }
  64. }
  65. }
  66. int RMQ_2dmax(int x1, int y1, int x2, int y2)
  67. {
  68. int k1 = log(double(x2 - x1 + )) / log(2.0);
  69. int k2 = log(double(y2 - y1 + )) / log(2.0);
  70. int m1 = dpmax[x1][y1][k1][k2];
  71. int m2 = dpmax[x2 - ( << k1) + ][y1][k1][k2];
  72. int m3 = dpmax[x1][y2 - ( << k2) + ][k1][k2];
  73. int m4 = dpmax[x2 - ( << k1) + ][y2 - ( << k2) + ][k1][k2];
  74. int _max = max(max(m1, m2), max(m3, m4));
  75. return _max;
  76. }
  77. int RMQ_2dmin(int x1, int y1, int x2, int y2)
  78. {
  79. int k1 = log(double(x2 - x1 + )) / log(2.0);
  80. int k2 = log(double(y2 - y1 + )) / log(2.0);
  81. int m1 = dpmin[x1][y1][k1][k2];
  82. int m2 = dpmin[x2 - ( << k1) + ][y1][k1][k2];
  83. int m3 = dpmin[x1][y2 - ( << k2) + ][k1][k2];
  84. int m4 = dpmin[x2 - ( << k1) + ][y2 - ( << k2) + ][k1][k2];
  85. int _min = min(min(m1, m2), min(m3, m4));
  86. return _min;
  87. }
  88. int main()
  89. {
  90. int n, m, t;
  91. int x1, x2, y1, y2;
  92. while (~scanf("%d%d", &m, &n))
  93. {
  94. for (int i = ; i <= m; i++)
  95. {
  96. for (int j = ; j <= n; j++)
  97. {
  98. scanf("%d", &mapp[i][j]);
  99. }
  100. }
  101. RMQ_init2d(m, n);
  102. scanf("%d", &t);
  103. while (t--)
  104. {
  105. scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
  106. flag = ;
  107. int _max = RMQ_2dmax(x1, y1, x2, y2);
  108. printf("max:%d", _max);
  109. int _min = RMQ_2dmin(x1, y1, x2, y2);
  110. printf("min:%d\n", _min);
  111. }
  112. }
  113. return ;
  114. }

RMQ 2d 模板的更多相关文章

  1. poj 3264 Balanced Lineup (RMQ算法 模板题)

    RMQ支持操作: Query(L, R):  计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...

  2. RMQ(模板 ST 区间最值,频繁的间隔时间)

    PS: 介绍:http://blog.csdn.net/liang5630/article/details/7917702 RMQ算法.是一个高速求区间最值的离线算法,预处理时间复杂度O(n*log( ...

  3. ZOJ 2859 二维RMQ(模板)

    这题求范围最小值,RMQ正好是用来解决这方面的.所以再适合只是了,又是离线静态输入输出的,所以时间比二维线段树快. #include<iostream> #include<cstdi ...

  4. rmq问题模板处理

    rmq问题: 先贴一下定义 范围最值查询 维基百科,自由的百科全书 范围最值查询(Range Minimum Query),是针对数据集的一种条件查询.若给定一个数组 A[1, n],范围最值查询指定 ...

  5. RMQ算法模板

    分别写了下标从0和1开始的两种 #include<stdio.h> #include<string.h> #include<algorithm> #include& ...

  6. 倍增算法总结 ( 含RMQ模板)

    部分题目来自<算法竞赛设计进阶> 问题       给定一个长度为n的数列A,有m个询问,每次给定一个整数T,求出最大的k,满足a[1],a[2]……a[k]的和小于等于T(不会打sigm ...

  7. RMQ 模板题 poj 3264

    题目:点这里 题意:给一个长度n的数列,然后又Q个询问,问L   到R   中最大值与最小值的差. 分析:RMQ 的模板题. 代码: #include<stdio.h> #include& ...

  8. LCA和RMQ

    下面写提供几个学习LCA和RMQ的博客,都很通熟易懂 http://dongxicheng.org/structure/lca-rmq/ 这个应该是讲得最好的,且博主还有很多其他文章,可以读读,感觉认 ...

  9. RMQ (Range Minimal Query) 问题 ,稀疏表 ST

    RMQ ( 范围最小值查询 ) 问题是一种动态查询问题,它不需要修改元素,但要及时回答出数组 A 在区间 [l, r] 中最小的元素值. RMQ(Range Minimum/Maximum Query ...

随机推荐

  1. Dark 面向对象

    1 继承 使用extends继承一个类 子类会继承父类可见的属性和方法,不包含构造方法 可以复写父类的方法 单继承,多态性 构造方法 子类的构造方法会默认调用父类的无名无参构造方法 如果父类没有无名无 ...

  2. Android 中数据存储方式有哪些?

    a) 文件存储b) xml,SharedPreferencec) SQLite数据库d) ContentProvidere) 网络

  3. 阶段3 2.Spring_09.JdbcTemplate的基本使用_6 JdbcDaoSupport的使用以及Dao的两种编写方式

    复制三个出来.分别叫做 OrderDaoImpl.ProductDaoImpl.UserDaoImpl 复制这三个出来就是为了解决重复性代码的问题. 每个dao中都有这段代码.这些都是重复性的代码.在 ...

  4. 二十:jinja2之加载静态文件

    静态文件: flask默认指定的静态文件路径为根目录下的static,可以自定义路径,并指定,使用url_for('文件夹', filename='文件名')引用 加载css文件 加载js文件 其他文 ...

  5. SQL Server 批量创建作业(备份主分区)

    一. 需求背景 在我的数据库实例中,有很多类似下图所示的数据库,这些数据库的名称是有规律的,每个数据库包含的表都是相同的,其中2个表是类似流水记录的表,表的数据量会比较大,占用的空间有几十G到上百G不 ...

  6. java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMap

    七月 26, 2017 1:52:15 上午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for ...

  7. gitlab中的CI

    https://blog.csdn.net/chengzi_comm/article/details/78778284

  8. 【Qt开发】Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包

    Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包 今天开始系统的学习QT,第一个测试的问题就是在纯净的系统中如何正常运行,也就是找出QT生成的exe的依赖库 ...

  9. 启用yarn的高可用

    选择高可用的主机,新的一台: 点运行结束后,会看到实例会多出一个备用的节点:

  10. Solrcloud单机伪集群部署

    线上有一套双节点的Solrcloud节点,因机器性能较老,环境搭建于2013年,原节点有数百个已经被unload的collections,考虑以后可能还会需要,所以搭建一套和原节点相同的solrclo ...