POJ 2019 Cornfields [二维RMQ]
Cornfields
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 7963 | Accepted: 3822 |
Description
FJ has, at great expense, surveyed his square farm of N x N hectares (1 <= N <= 250). Each hectare has an integer elevation (0 <= elevation <= 250) associated with it.
FJ will present your program with the elevations and a set of K (1 <= K <= 100,000) queries of the form "in this B x B submatrix, what is the maximum and minimum elevation?". The integer B (1 <= B <= N) is the size of one edge of the square cornfield and is a constant for every inquiry. Help FJ find the best place to put his cornfield.
Input
* Lines 2..N+1: Each line contains N space-separated integers. Line 2 represents row 1; line 3 represents row 2, etc. The first integer on each line represents column 1; the second integer represents column 2; etc.
* Lines N+2..N+K+1: Each line contains two space-separated integers representing a query. The first integer is the top row of the query; the second integer is the left column of the query. The integers are in the range 1..N-B+1.
Output
Sample Input
5 3 1
5 1 2 6 3
1 3 5 2 7
7 2 4 6 1
9 9 8 6 5
0 6 9 3 9
1 2
Sample Output
5
Source
分析:
二维$RMQ$模板题。
就是模板,但是卡空间是真恶心。。。卡了一个小时。
Code:
//It is made by HolseLee on 4th Sep 2018
//POJ 2019
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N=;
int mi[N][N][][];
int ma[N][N][][]; void ready(int n)
{
for(int i=; (<<i)<=n; ++i)
for(int j=; (<<j)<=n; ++j) {
if( i== && j== ) continue;
for(int line=; line+(<<i)-<=n; ++line)
for(int ray=; ray+(<<j)-<=n; ++ray) {
if( i ) {
mi[line][ray][i][j]=min(mi[line][ray][i-][j],mi[line+(<<(i-))][ray][i-][j]);
ma[line][ray][i][j]=max(ma[line][ray][i-][j],ma[line+(<<(i-))][ray][i-][j]);
} else {
mi[line][ray][i][j]=min(mi[line][ray][i][j-],mi[line][ray+(<<(j-))][i][j-]);
ma[line][ray][i][j]=max(ma[line][ray][i][j-],ma[line][ray+(<<(j-))][i][j-]);
}
}
}
} int quary(int x,int y,int X,int Y)
{
int kx=,ky=,m1,m2,m3,m4,minn,maxx;
while( (<<(kx+))<=X-x+ ) kx++;
while( (<<(ky+))<=Y-y+ ) ky++; minn=min(min(mi[x][y][kx][ky],mi[X-(<<kx)+][Y-(<<ky)+][kx][ky]),min(mi[X-(<<kx)+][y][kx][ky],mi[x][Y-(<<ky)+][kx][ky])); maxx=max(max(ma[x][y][kx][ky],ma[X-(<<kx)+][Y-(<<ky)+][kx][ky]),max(ma[X-(<<kx)+][y][kx][ky],ma[x][Y-(<<ky)+][kx][ky])); return maxx-minn;
} int main()
{
int n,B,m;
while( scanf("%d%d%d",&n,&B,&m)== && n && B &&m ) {
int x,y;
for(int i=; i<=n; ++i)
for(int j=; j<=n; ++j) {
scanf("%d",&x);
mi[i][j][][]=ma[i][j][][]=x;
}
ready(n);
while( m-- ) {
scanf("%d%d",&x,&y);
int ans=quary(x,y,x+B-,y+B-);
printf("%d\n",ans);
}
}
return ;
}
POJ 2019 Cornfields [二维RMQ]的更多相关文章
- POJ 2019 Cornfields 二维线段树的初始化与最值查询
模板到不行.. 连更新都没有.. .存个模板. 理解留到小结的时候再写. #include <algorithm> #include <iostream> #include & ...
- [poj2019]Cornfields(二维RMQ)
题意:给你一个n*n的矩阵,让你从中圈定一个小矩阵,其大小为b*b,有q个询问,每次询问告诉你小矩阵的左上角,求小矩阵内的最大值和最小值的差. 解题关键:二维st表模板题. 预处理复杂度:$O({n^ ...
- POJ 2019 Cornfields (二维RMQ)
Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4911 Accepted: 2392 Descri ...
- [POJ 2019] Cornfields
Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5516 Accepted: 2714 Descri ...
- poj2019 二维RMQ裸题
Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions:8623 Accepted: 4100 Descrip ...
- hdu2888 二维RMQ
Check Corners Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hduacm 2888 ----二维rmq
http://acm.hdu.edu.cn/showproblem.php?pid=2888 模板题 直接用二维rmq 读入数据时比较坑爹 cin 会超时 #include <cstdio& ...
- hdu 2888 二维RMQ模板题
Check Corners Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2888 Check Corners (模板题)【二维RMQ】
<题目链接> <转载于 >>> > 题目大意: 给出一个N*M的矩阵,并且给出该矩阵上每个点对应的值,再进行Q次询问,每次询问给出代询问子矩阵的左上顶点和右下 ...
随机推荐
- 51nod 1449 砝码称重 (进制思想)
1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 现在有好多种砝码,他们的重量是 w0,w1,w ...
- 软件测试(三)—— 参数化测试用例(Nextday.java)
import static org.junit.Assert.*; import java.lang.reflect.Array; import java.util.Arrays; import ja ...
- 重构改善既有代码设计--重构手法07:Remove Assignments to Parameters (移除对参数的赋值)
代码对一个 参数赋值.以一个临时变量取代该参数的位置. int Discount(int inputVal, int quantity, int yearTodate) { if (input ...
- bzoj 2213: [Poi2011]Difference
Description A word consisting of lower-case letters of the English alphabet ('a'-'z') is given. We w ...
- 推箱子 BFS
[编程题] 推箱子 大家一定玩过“推箱子”这个经典的游戏.具体规则就是在一个N*M的地图上,有1个玩家.1个箱子.1个目的地以及若干障碍,其余是空地.玩家可以往上下左右4个方向移动,但是不能移动出地图 ...
- Django之ModelForm(二)-----ModelForm组件
a. class Meta: model, # 对应Model的 fields=None, ...
- 24、简述Python的深浅拷贝以及应用场景
深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...
- 绿色的银行类cms管理系统模板——后台
链接:http://pan.baidu.com/s/1pK7Vu9X 密码:4cc5
- WordPress404页面自定义
不知道大家是怎么设计404页面,个性的404可以为网站增色不少,wordpress设置404是在主题里面的404.php页面上,当然比如你用Apache.nginx等服务器,你可以自己建一个单页,内容 ...
- python并发编程之gevent协程(四)
协程的含义就不再提,在py2和py3的早期版本中,python协程的主流实现方法是使用gevent模块.由于协程对于操作系统是无感知的,所以其切换需要程序员自己去完成. 系列文章 python并发编程 ...