#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 模板的更多相关文章

  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. 线性回归linear regression(python脚本实现)

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

  2. MYSQL5.6二进制包的安装

    二进制1. 下载包 wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz2. 解 ...

  3. 阶段3 2.Spring_10.Spring中事务控制_4 spring中事务控制的一组API

    分析aop的 xml 的代码.更直观一些 事务提交和回滚就是我们重复的代码 spring业余事务管理器,我们拿过来直接用就可以 提交和回滚的后面直接调用释放.所以释放资源之类就是多余的 在绑定连接到线 ...

  4. 阶段3 2.Spring_06.Spring的新注解_1 spring的新注解-Configuration和ComponentScan

    解决测试类重复代码的问题,xml还是存在的问题,没法脱离xml文件 要想在QueryRunner上加注解,是加不了的 创建工程 复制依赖项到pom.xml 复制注解的工程里面的com文件夹 配置文件b ...

  5. 如何利用Nginx的缓冲、缓存优化提升性能

    使用缓冲释放后端服务器 反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响.在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻. 当代理到另一台服务器,两个不同的连接 ...

  6. bootstrap select2控件

  7. 描述下数据库中的事务--ACID各个的特点

    1. 原子性(Atomicity) 在一个事务内的操作,要么全部成功,要么全部失败. 2. 一致性(Consistency) 数据库从一个一致性状态,转移到另一个一致性状态. 3. 隔离性(Isola ...

  8. Linux man及echo的使用

    学习目标: 通过本实验掌握man和echo两个命令的用法. 实验步骤: 1.通过man查询ls的详细用法,后面可以跟哪些参数,每个参数的作用.这里主要查找如何禁止ls彩色结果输出. 2.把查找到的参数 ...

  9. OUTLOOK、foxmail等无法直接打开邮件中的超级链接问题

         部分电脑,在OUTLOOK或Foxmail收到隔离邮件通知时,点击发送或删除时,提示“一般性错误,*******************,找不到应用程序”.或打开其它HTML格式的邮件正文中 ...

  10. java反射机制学习笔记

    内容引用自:https://www.cnblogs.com/wkrbky/p/6201098.html https://www.cnblogs.com/xumBlog/p/8882489.html,本 ...