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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<bitset>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define INF 510010
#define maxn 310
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int N;
int val[301][301];
int dp[maxn][maxn][9][9];
void RMQ_2D()
{for(int row = 1; row <= N; row++)for(int col = 1; col<=N; col++)dp[row][col][0][0] = val[row][col];int m = log(double(N)) / log(2.0);for(int i=0; i<=m; i++)for(int j=0; j<=m; j++){if(i == 0 && j==0) continue;for(int row = 1; row+(1<<i)-1 <= N; row++)for(int col = 1; col+(1<<j)-1 <= N; col++){if(i == 0) dp[row][col][i][j] = min(dp[row][col][i][j-1] , dp[row][col+(1<<(j-1))][i][j-1]);  //水平划分else dp[row][col][i][j] = min(dp[row][col][i-1][j] , dp[row+(1<<(i-1))][col][i-1][j]);    //竖直划分}}
}
int RMQ_2D(int x1,int x2,int y1,int y2)
{int kx = log(double(x2 - x1 +1)) / log(2.0);int ky = log(double(y2 - y1 +1)) / log(2.0);int m1 = dp[x1][y1][kx][ky];int m2 = dp[x2-(1<<kx)+1][y1][kx][ky];int m3 = dp[x1][y2-(1<<ky)+1][kx][ky];int m4 = dp[x2-(1<<kx)+1][y2-(1<<ky)+1][kx][ky];return min( min(m1,m2), min(m3,m4) );
}
int main()
{int T;scanf("%d",&T);int M;int x1,y1,x2,y2;while(T--){scanf("%d",&N);for(int i=1; i<=N; i++)for(int j=1; j<=N; j++)scanf("%d",&val[i][j]);RMQ_2D();scanf("%d",&M);while(M--){scanf("%d%d%d%d",&x1,&y1,&x2,&y2);printf("%d\n",RMQ_2D(x1,x2,y1,y2));}}return 0;
}

转载于:https://www.cnblogs.com/zsychanpin/p/6713583.html

ZOJ 2859 二维RMQ(模板)相关推荐

  1. P2163 [SHOI2007]园丁的烦恼(二维数点模板题)

    P2163 [SHOI2007]园丁的烦恼 题意: 在一个二维平面内有一些点,给你一个左上角和右下角的点,问这个范围内有多少点 题解: 二维数点模板题 我们设F(a,b)表示以(0,0)为左下角,(a ...

  2. P2216 [HAOI2007]理想的正方形(二维RMQ)

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...

  3. 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非 ...

  4. 理想的正方形 HAOI2007(二维RMQ)

    理想的正方形 省队选拔赛河南  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master       题目描述 Description 有一个a*b的整数组成的矩阵,现 ...

  5. poj2019(二维RMQ)

    题目连接:http://poj.org/problem?id=2019 只是增加一个维度,类比一维即可. 好理解,但是可以做的更好http://www.cnblogs.com/yijiull/p/67 ...

  6. HDU2888(二维RMQ)

    题目:Check Corners 本题碉堡了,内存限制好紧,再大一点都不行,还只能用int,开始用short WA了好多次..... 题意:给一个矩阵,然后给Q个询问,每个询问有四个数,分别代表询问的 ...

  7. POJ2019(二维RMQ问题 ST)

    题目:Cornfields 只是注意本题数据定义小一点,不然会超内存. #include <stdio.h> #include <iostream> #include < ...

  8. Codeforces713D(二维RMQ)

    区间最大子正方形问题. 预处理后二分答案验证 AC Code: #include<bits/stdc++.h> #define maxn 1005 #define lim 10 using ...

  9. LightOJ 1266 - Points in Rectangle 二维树状数组

    题目链接 题意:给一个平面,有两个操作 0 x y 在(x,y)处放置一个点 1 x1 y1 x2 y2 查询左下角为(x1,y1),右上角为(x2,y2)的矩形区域包含多少个点(包括边界) 使用二维 ...

  10. 怎样制作一个漂亮的艺术二维码?

    随着二维码的产生,很多应用场景下都能看到各种二维码的使用.比如:有黑白的二维码.动态的二维码.3D的二维码等等! 如果要求不高,那么我们就直接使用黑白二维码就可以了,那么对于那些设计感很强的用户需求来 ...

最新文章

  1. 悠然乱弹:我的开源观
  2. Java源码详解三:Hashtable源码分析--openjdk java 11源码
  3. 重读图灵经典之作,九条反驳意见引人深思
  4. 理解I/O Completion Port(完成端口)
  5. sybase备份问题
  6. 编译系统总结篇-Android10.0编译系统(十一)
  7. Linux Versus Windows, Ubuntu/Mint V XP/Vista/7
  8. teechart mysql_TeeChart 的应用
  9. C语言,利用一维数组交换法排序,使学生成绩高低排序(要求输入为负值时输入结束)
  10. python怎么读程序-python 怎么念
  11. ES6入门之let、cont
  12. 微信支付android错误码-1,安卓调用微信支付一直都是-1的错误,求问怎么解决
  13. Openwrt netifd ubus解析
  14. 3Dmax读取丢失的贴图的方法
  15. 信道估计之LMMSE估计
  16. 计算机状态代码意义,DELL电脑自检代码错误提示含义
  17. amd cpu排行_AMD R5系列处理器性能排名 CPU天梯图2017年4月最新完整版
  18. 苞米豆MyBatis-plus代码生成器
  19. 设计师都爱用的UI标注软件有哪些?
  20. 【win】系统工具Win PE

热门文章

  1. c++自动抢购_小黄人汽车手机支架多功能出风口高档可充电全自动导航卡通支架2元优惠券券后价22.9元...
  2. 乍暖还寒也不怕 浅谈物联网智能温度控制器
  3. Salt: 2015.8.8.2 L@匹配BUG
  4. [改善Java代码]使用CyclicBarrier让多线程齐步走
  5. 使用css3背景渐变中的透明度来设置不同颜色的背景渐变
  6. 超实用的JavaScript技巧及最佳实践(下)
  7. typedef与define的区别
  8. 多项式曲线,分段曲线,曲线参数化,平面曲线,插值方法的样条曲线
  9. 3.5 Java经典垃圾收集器介绍
  10. SpringBoot1.5.9集成Activiti6