RMQ 2d 模板
- #include<iostream>
- #include<cstdio>
- #include<string.h>
- #include<string>
- #include<stack>
- #include<set>
- #include<algorithm>
- #include<cmath>
- #include<vector>
- #include<map>
- #define ll __int64
- #define lll unsigned long long
- #define MAX 1000009
- #define eps 1e-8
- using namespace std;
- /*
- 二维RMQ模板题
- 同一维一样 用dp[row][col][i][j]表示(row,col)到(row+2^i,col+2^j)矩形内的最小值
- 查询
- */
- int mapp[][];
- int dpmax[][][][];
- int dpmin[][][][];
- int flag;
- void RMQ_init2d(int m, int n)
- {
- for (int i = ; i <= m; i++)
- {
- for (int j = ; j <= n; j++)
- {
- dp[i][j][][] = dpmax[i][j][][] = mapp[i][j];
- }
- }
- int t = log((double)n) / log(2.0);
- for (int i = ; i <= t; i++)
- {
- for (int j = ; j <= t; j++)
- {
- if (i == && j == )
- {
- continue;
- }
- for (int row = ; row + ( << i) - <= m; row++)
- {
- for (int col = ; col + ( << j) - <= n; col++)
- {
- if (i)
- {
- dpmax[row][col][i][j] = max(dpmax[row][col][i - ][j], dpmax[row + ( << (i - ))][col][i - ][j]);
- dpmin[row][col][i][j] = min(dpmin[row][col][i - ][j], dpmin[row + ( << (i - ))][col][i - ][j]);
- }
- else
- {
- dpmax[row][col][i][j] = max(dpmin[row][col][i][j - ], dpmin[row][col + ( << (j - ))][i][j - ]);
- dpmin[row][col][i][j] = min(dpmin[row][col][i][j - ], dpmin[row][col + ( << (j - ))][i][j - ]);
- }
- }
- }
- }
- }
- }
- int RMQ_2dmax(int x1, int y1, int x2, int y2)
- {
- int k1 = log(double(x2 - x1 + )) / log(2.0);
- int k2 = log(double(y2 - y1 + )) / log(2.0);
- int m1 = dpmax[x1][y1][k1][k2];
- int m2 = dpmax[x2 - ( << k1) + ][y1][k1][k2];
- int m3 = dpmax[x1][y2 - ( << k2) + ][k1][k2];
- int m4 = dpmax[x2 - ( << k1) + ][y2 - ( << k2) + ][k1][k2];
- int _max = max(max(m1, m2), max(m3, m4));
- return _max;
- }
- int RMQ_2dmin(int x1, int y1, int x2, int y2)
- {
- int k1 = log(double(x2 - x1 + )) / log(2.0);
- int k2 = log(double(y2 - y1 + )) / log(2.0);
- int m1 = dpmin[x1][y1][k1][k2];
- int m2 = dpmin[x2 - ( << k1) + ][y1][k1][k2];
- int m3 = dpmin[x1][y2 - ( << k2) + ][k1][k2];
- int m4 = dpmin[x2 - ( << k1) + ][y2 - ( << k2) + ][k1][k2];
- int _min = min(min(m1, m2), min(m3, m4));
- return _min;
- }
- int main()
- {
- int n, m, t;
- int x1, x2, y1, y2;
- while (~scanf("%d%d", &m, &n))
- {
- for (int i = ; i <= m; i++)
- {
- for (int j = ; j <= n; j++)
- {
- scanf("%d", &mapp[i][j]);
- }
- }
- RMQ_init2d(m, n);
- scanf("%d", &t);
- while (t--)
- {
- scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
- flag = ;
- int _max = RMQ_2dmax(x1, y1, x2, y2);
- printf("max:%d", _max);
- int _min = RMQ_2dmin(x1, y1, x2, y2);
- printf("min:%d\n", _min);
- }
- }
- return ;
- }
RMQ 2d 模板的更多相关文章
- poj 3264 Balanced Lineup (RMQ算法 模板题)
RMQ支持操作: Query(L, R): 计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...
- RMQ(模板 ST 区间最值,频繁的间隔时间)
PS: 介绍:http://blog.csdn.net/liang5630/article/details/7917702 RMQ算法.是一个高速求区间最值的离线算法,预处理时间复杂度O(n*log( ...
- ZOJ 2859 二维RMQ(模板)
这题求范围最小值,RMQ正好是用来解决这方面的.所以再适合只是了,又是离线静态输入输出的,所以时间比二维线段树快. #include<iostream> #include<cstdi ...
- rmq问题模板处理
rmq问题: 先贴一下定义 范围最值查询 维基百科,自由的百科全书 范围最值查询(Range Minimum Query),是针对数据集的一种条件查询.若给定一个数组 A[1, n],范围最值查询指定 ...
- RMQ算法模板
分别写了下标从0和1开始的两种 #include<stdio.h> #include<string.h> #include<algorithm> #include& ...
- 倍增算法总结 ( 含RMQ模板)
部分题目来自<算法竞赛设计进阶> 问题 给定一个长度为n的数列A,有m个询问,每次给定一个整数T,求出最大的k,满足a[1],a[2]……a[k]的和小于等于T(不会打sigm ...
- RMQ 模板题 poj 3264
题目:点这里 题意:给一个长度n的数列,然后又Q个询问,问L 到R 中最大值与最小值的差. 分析:RMQ 的模板题. 代码: #include<stdio.h> #include& ...
- LCA和RMQ
下面写提供几个学习LCA和RMQ的博客,都很通熟易懂 http://dongxicheng.org/structure/lca-rmq/ 这个应该是讲得最好的,且博主还有很多其他文章,可以读读,感觉认 ...
- RMQ (Range Minimal Query) 问题 ,稀疏表 ST
RMQ ( 范围最小值查询 ) 问题是一种动态查询问题,它不需要修改元素,但要及时回答出数组 A 在区间 [l, r] 中最小的元素值. RMQ(Range Minimum/Maximum Query ...
随机推荐
- Dark 面向对象
1 继承 使用extends继承一个类 子类会继承父类可见的属性和方法,不包含构造方法 可以复写父类的方法 单继承,多态性 构造方法 子类的构造方法会默认调用父类的无名无参构造方法 如果父类没有无名无 ...
- Android 中数据存储方式有哪些?
a) 文件存储b) xml,SharedPreferencec) SQLite数据库d) ContentProvidere) 网络
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_6 JdbcDaoSupport的使用以及Dao的两种编写方式
复制三个出来.分别叫做 OrderDaoImpl.ProductDaoImpl.UserDaoImpl 复制这三个出来就是为了解决重复性代码的问题. 每个dao中都有这段代码.这些都是重复性的代码.在 ...
- 二十:jinja2之加载静态文件
静态文件: flask默认指定的静态文件路径为根目录下的static,可以自定义路径,并指定,使用url_for('文件夹', filename='文件名')引用 加载css文件 加载js文件 其他文 ...
- SQL Server 批量创建作业(备份主分区)
一. 需求背景 在我的数据库实例中,有很多类似下图所示的数据库,这些数据库的名称是有规律的,每个数据库包含的表都是相同的,其中2个表是类似流水记录的表,表的数据量会比较大,占用的空间有几十G到上百G不 ...
- java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMap
七月 26, 2017 1:52:15 上午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for ...
- gitlab中的CI
https://blog.csdn.net/chengzi_comm/article/details/78778284
- 【Qt开发】Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包
Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包 今天开始系统的学习QT,第一个测试的问题就是在纯净的系统中如何正常运行,也就是找出QT生成的exe的依赖库 ...
- 启用yarn的高可用
选择高可用的主机,新的一台: 点运行结束后,会看到实例会多出一个备用的节点:
- Solrcloud单机伪集群部署
线上有一套双节点的Solrcloud节点,因机器性能较老,环境搭建于2013年,原节点有数百个已经被unload的collections,考虑以后可能还会需要,所以搭建一套和原节点相同的solrclo ...