ZOJ 2859 二维RMQ(模板)
这题求范围最小值,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(模板)相关推荐
- P2163 [SHOI2007]园丁的烦恼(二维数点模板题)
P2163 [SHOI2007]园丁的烦恼 题意: 在一个二维平面内有一些点,给你一个左上角和右下角的点,问这个范围内有多少点 题解: 二维数点模板题 我们设F(a,b)表示以(0,0)为左下角,(a ...
- P2216 [HAOI2007]理想的正方形(二维RMQ)
题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...
- 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ
题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非 ...
- 理想的正方形 HAOI2007(二维RMQ)
理想的正方形 省队选拔赛河南 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 有一个a*b的整数组成的矩阵,现 ...
- poj2019(二维RMQ)
题目连接:http://poj.org/problem?id=2019 只是增加一个维度,类比一维即可. 好理解,但是可以做的更好http://www.cnblogs.com/yijiull/p/67 ...
- HDU2888(二维RMQ)
题目:Check Corners 本题碉堡了,内存限制好紧,再大一点都不行,还只能用int,开始用short WA了好多次..... 题意:给一个矩阵,然后给Q个询问,每个询问有四个数,分别代表询问的 ...
- POJ2019(二维RMQ问题 ST)
题目:Cornfields 只是注意本题数据定义小一点,不然会超内存. #include <stdio.h> #include <iostream> #include < ...
- Codeforces713D(二维RMQ)
区间最大子正方形问题. 预处理后二分答案验证 AC Code: #include<bits/stdc++.h> #define maxn 1005 #define lim 10 using ...
- LightOJ 1266 - Points in Rectangle 二维树状数组
题目链接 题意:给一个平面,有两个操作 0 x y 在(x,y)处放置一个点 1 x1 y1 x2 y2 查询左下角为(x1,y1),右上角为(x2,y2)的矩形区域包含多少个点(包括边界) 使用二维 ...
- 怎样制作一个漂亮的艺术二维码?
随着二维码的产生,很多应用场景下都能看到各种二维码的使用.比如:有黑白的二维码.动态的二维码.3D的二维码等等! 如果要求不高,那么我们就直接使用黑白二维码就可以了,那么对于那些设计感很强的用户需求来 ...
最新文章
- 悠然乱弹:我的开源观
- Java源码详解三:Hashtable源码分析--openjdk java 11源码
- 重读图灵经典之作,九条反驳意见引人深思
- 理解I/O Completion Port(完成端口)
- sybase备份问题
- 编译系统总结篇-Android10.0编译系统(十一)
- Linux Versus Windows, Ubuntu/Mint V XP/Vista/7
- teechart mysql_TeeChart 的应用
- C语言,利用一维数组交换法排序,使学生成绩高低排序(要求输入为负值时输入结束)
- python怎么读程序-python 怎么念
- ES6入门之let、cont
- 微信支付android错误码-1,安卓调用微信支付一直都是-1的错误,求问怎么解决
- Openwrt netifd ubus解析
- 3Dmax读取丢失的贴图的方法
- 信道估计之LMMSE估计
- 计算机状态代码意义,DELL电脑自检代码错误提示含义
- amd cpu排行_AMD R5系列处理器性能排名 CPU天梯图2017年4月最新完整版
- 苞米豆MyBatis-plus代码生成器
- 设计师都爱用的UI标注软件有哪些?
- 【win】系统工具Win PE
热门文章
- c++自动抢购_小黄人汽车手机支架多功能出风口高档可充电全自动导航卡通支架2元优惠券券后价22.9元...
- 乍暖还寒也不怕 浅谈物联网智能温度控制器
- Salt: 2015.8.8.2 L@匹配BUG
- [改善Java代码]使用CyclicBarrier让多线程齐步走
- 使用css3背景渐变中的透明度来设置不同颜色的背景渐变
- 超实用的JavaScript技巧及最佳实践(下)
- typedef与define的区别
- 多项式曲线,分段曲线,曲线参数化,平面曲线,插值方法的样条曲线
- 3.5 Java经典垃圾收集器介绍
- SpringBoot1.5.9集成Activiti6