和hdu2888基本上一样的,也是求一个矩阵内的极值

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn 252
int n,b,q;
int dpmax[maxn][maxn][][],dpmin[maxn][maxn][][],val[maxn][maxn];
void ST(){
int k=log2(n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) dpmax[i][j][][]=dpmin[i][j][][]=val[i][j];
for(int i=;i<=k;i++)//先求出一行内的最大值和最小值,然后再求出行间的最大值和最小值
for(int j=;j<=k;j++){
if(i== && j==) continue;
for(int r=;r+(<<i)-<=n;r++)
for(int c=;c+(<<j)-<=n;c++)
if(i==){//在同一行内
dpmax[r][c][i][j]=max(dpmax[r][c][i][j-],dpmax[r][c+(<<(j-))][i][j-]);
dpmin[r][c][i][j]=min(dpmin[r][c][i][j-],dpmin[r][c+(<<(j-))][i][j-]);
}
else {
dpmax[r][c][i][j]=max(dpmax[r][c][i-][j],dpmax[r+(<<(i-))][c][i-][j]);
dpmin[r][c][i][j]=min(dpmin[r][c][i-][j],dpmin[r+(<<(i-))][c][i-][j]);
}
}
}
int query(int r,int c){
int r1=r,c1=c,r2=r+b-,c2=c+b-,k=log2(b);
int max1=dpmax[r1][c1][k][k];
int max2=dpmax[r2-(<<k)+][c1][k][k];
int max3=dpmax[r1][c2-(<<k)+][k][k];
int max4=dpmax[r2-(<<k)+][c2-(<<k)+][k][k];
int min1=dpmin[r1][c1][k][k];
int min2=dpmin[r2-(<<k)+][c1][k][k];
int min3=dpmin[r1][c2-(<<k)+][k][k];
int min4=dpmin[r2-(<<k)+][c2-(<<k)+][k][k];
return max(max(max1,max2),max(max3,max4))-min(min(min1,min2),min(min3,min4));
}
int main(){
while(scanf("%d%d%d",&n,&b,&q)==){
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) scanf("%d",&val[i][j]);
ST();int r,c;
while(q--){
scanf("%d%d",&r,&c);
printf("%d\n",query(r,c));
}
}
return ;
}

poj2019 二维RMQ模板题的更多相关文章

  1. hdu 2888 二维RMQ模板题

    Check Corners Time Limit: 2000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  2. poj2019 二维RMQ裸题

    Cornfields Time Limit: 1000MS   Memory Limit: 30000K Total Submissions:8623   Accepted: 4100 Descrip ...

  3. 二维RMQ模板

    int main(){ ; i <= n; i++) ; j <= m; j++) { scanf("%d", &val[i][j]); dp[i][j][][ ...

  4. Cornfields POJ - 2019(二维RMQ板题)

    就是求子矩阵中最大值与最小值的差... 板子都套不对的人.... #include <iostream> #include <cstdio> #include <sstr ...

  5. Cornfields poj2019 二维RMQ

    Cornfields Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit S ...

  6. POJ 2019 Cornfields [二维RMQ]

    题目传送门 Cornfields Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7963   Accepted: 3822 ...

  7. HDU 2888:Check Corners(二维RMQ)

    http://acm.hdu.edu.cn/showproblem.php?pid=2888 题意:给出一个n*m的矩阵,还有q个询问,对于每个询问有一对(x1,y1)和(x2,y2),求这个子矩阵中 ...

  8. Zeratul的完美区间(线段树||RMQ模板题)

    原题大意:原题链接 给定元素无重复数组,查询给定区间内元素是否连续 解体思路:由于无重复元素,所以如果区间内元素连续,则该区间内的最大值和最小值之差应该等于区间长度(r-l) 解法一:线段树(模板题) ...

  9. HDU 2888 Check Corners (模板题)【二维RMQ】

    <题目链接> <转载于 >>> > 题目大意: 给出一个N*M的矩阵,并且给出该矩阵上每个点对应的值,再进行Q次询问,每次询问给出代询问子矩阵的左上顶点和右下 ...

随机推荐

  1. maven中修改可用的版本

    一般情况下,我们都是建项目,写代码,然后再部署运行的.到最后因为版本问题无法部署的情况下怎么办?重新建项目,然后导代码,这太麻烦了. 一般的处理情况:在项目的硬盘目录中,找到.setting文件夹下的 ...

  2. P4891 序列

    P4891 序列 题目描述 给定两个长度为 n 的序列 A 和 B,定义序列 \(C_i=\max\limits_{j=1}^i A_j\) 定义当前的价值是 $\prod\limits_{i=1}^ ...

  3. nodejs实现新闻爬虫

    作为费德勒的铁杆粉丝,每天早上都会在新浪体育里面的网球频道浏览费德勒新闻.由于只关注费德勒的新闻,所以每次都要在网页中大量的新闻中筛选相关信息,感觉效率好低,所以用node写了一个简单的爬虫程序通过每 ...

  4. SQL语句(四)可视化创建和修改表

    可视化创建修改表 数据库(teaching)->表->新建表 数据库(teaching)->表->(右键)设计->CHECK约束->添加---->标识(名称) ...

  5. A+B (带有,的数字)

    题目描述 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开. 现在请计算A+B的结果,并以正常形式输出. 输入描述: 输入包含多组数据数据,每组数据占一行,由 ...

  6. 在Eclipse中利用maven整合搭建ssm框架

    首先说明用到的框架: spring  +  springMVC  +  mybatis 构建工具:maven 开发工具:eclipse 开发环境:win10      java版本:jdk1.8    ...

  7. JavaScript实战总结

    javascript中数组的22种方法:http://www.cnblogs.com/xiaohuochai/p/5682621.html 1.js闭包 2.eval函数 eval(“字符串”)  将 ...

  8. Javaweb中提到的反射浅析(附源码)

    反射:一个jdk5.0的新特性,高级运用.在后期的框架中,这个是一大重点,现在估计我们都不会太多的接触他的.但是为了后面的铺垫,我想还是先了解一下: 先构造一个类,然后我们用反射来获取,调用里面的方法 ...

  9. SmartUpload文件上传组件的使用教程

    在项目中使用SmartUpload组件可以进行文件的上传和下载操作 使用步骤 1.导入jar包,进行build path操作 2.编写文件上传页面,代码如下 <form action=" ...

  10. collocation

    a collocation is two or more words that often go together. These combination just sound "right& ...