bzoj 1047 单调队列
做4次单调队列优化DP。
/**************************************************************
Problem: 1047
User: idy002
Language: C++
Result: Accepted
Time:2088 ms
Memory:16756 kb
****************************************************************/ #include <cstdio>
#define N 1010 struct Pair {
int i, j, v;
Pair(){}
Pair( int i, int j, int v ):i(i),j(j),v(v){}
}; int n, m, r, ans;
int v[N][N], dp[N][N], dmin[N][N], dmax[N][N];
Pair qu[N]; int bg, ed; int dodp() {
// min
for( int i=; i<=n; i++ ) {
bg=, ed=;
for( int j=; j<=m; j++ ) {
while( bg<=ed && qu[bg].j<j-r+ ) bg++;
while( bg<=ed && qu[ed].v>v[i][j] ) ed--;
qu[++ed] = Pair(i,j,v[i][j]);
dp[i][j] = qu[bg].v;
}
}
for( int j=; j<=m; j++ ) {
bg=, ed=;
for( int i=; i<=n; i++ ) {
while( bg<=ed && qu[bg].i<i-r+ ) bg++;
while( bg<=ed && qu[ed].v>dp[i][j] ) ed--;
qu[++ed] = Pair(i,j,dp[i][j]);
dmin[i][j] = qu[bg].v;
}
}
// max
for( int i=; i<=n; i++ ) {
bg=, ed=;
for( int j=; j<=m; j++ ) {
while( bg<=ed && qu[bg].j<j-r+ ) bg++;
while( bg<=ed && qu[ed].v<v[i][j] ) ed--;
qu[++ed] = Pair(i,j,v[i][j]);
dp[i][j] = qu[bg].v;
}
}
for( int j=; j<=m; j++ ) {
bg=, ed=;
for( int i=; i<=n; i++ ) {
while( bg<=ed && qu[bg].i<i-r+ ) bg++;
while( bg<=ed && qu[ed].v<dp[i][j] ) ed--;
qu[++ed] = Pair(i,j,dp[i][j]);
dmax[i][j] = qu[bg].v;
}
}
int ans = ;
for( int i=r; i<=n; i++ )
for( int j=r; j<=m; j++ ) {
int tans = dmax[i][j]-dmin[i][j];
if( ans>tans ) ans=tans;
}
/* debug
fprintf( stderr, "n=%d m=%d r=%d\n", n, m, r );
fprintf( stderr, "v:\n" );
for( int i=1; i<=n; i++ ) {
for( int j=1; j<=m; j++ )
fprintf( stderr, "%2d ", v[i][j] );
fprintf( stderr, "\n" );
}
fprintf( stderr, "dmin:\n" );
for( int i=1; i<=n; i++ ) {
for( int j=1; j<=m; j++ )
fprintf( stderr, "%2d ", dmin[i][j] );
fprintf( stderr, "\n" );
}
fprintf( stderr, "dmax:\n" );
for( int i=1; i<=n; i++ ) {
for( int j=1; j<=m; j++ )
fprintf( stderr, "%2d ", dmax[i][j] );
fprintf( stderr, "\n" );
}
*/
return ans;
}
int main() {
scanf( "%d%d%d", &n, &m, &r );
for( int i=; i<=n; i++ )
for( int j=; j<=m; j++ )
scanf( "%d", &v[i][j] );
printf( "%d\n", dodp() );
}
bzoj 1047 单调队列的更多相关文章
- BZOJ 4385 单调队列
思路: 对于每一个r 要找最小的符合条件的l最优 这时候就要找在这个区间中 d长度的和的最大值 用单调队列更新就好了 //By SiriusRen #include <cstdio> #i ...
- bzoj 3126 单调队列优化dp
能转移的最左是其左边完整区间的最右左端点,最右是能覆盖它的最左左端点-1 #pragma GCC optimize ("O3") #include<cstdio> #i ...
- BZOJ 3831 单调队列DP
思路: 这好像是我刚学单调性的时候做的题 (我是不会告诉你 我被这题教做人了的...) i-stk[head]>k 删队头 f[stk[tail]]>f[i]||(f[stk[tail]] ...
- BZOJ 2096 单调队列
思路: 偷懒用的STL //By SiriusRen #include <deque> #include <cstdio> using namespace std; struc ...
- BZOJ 1012 单调队列+二分
思路: 维护一个单减的序列 序号是单增的 每回二分查找第一个比询问的大的值 我手懒 用得lower_bound //By SiriusRen #include <cstdio> #incl ...
- [BZOJ 1047] [HAOI2007] 理想的正方形 【单调队列】
题目链接:BZOJ - 1047 题目分析 使用单调队列在 O(n^2) 的时间内求出每个 n * n 正方形的最大值,最小值.然后就可以直接统计答案了. 横向有 a 个单调队列(代码中是 Q[1] ...
- BZOJ 1047 二维单调队列
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...
- BZOJ 1047 理想的正方形(单调队列)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1047 题意:给出一个n*m的矩阵.在所有K*K的子矩阵中,最大最小差值最小的是多少? 思 ...
- bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp
题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2369 Solved: 1266[Submi ...
随机推荐
- Hibernate5笔记1--Hibernate简介和第一个程序
Hibernate简介: Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hib ...
- spring学习之三 数据库操作jdbcTemplate
概念 jdbcTemplate就Spring对数据库持久化技术的实现,通过它可以对数据库进行CRUD等操作. JDBCTemplate和代码实现 public void jdbcadd() { Dri ...
- docker安装(2018-03-14版本)
[安装] 说明一: CENTOS或RHEL自带的docker源不一定是最新的,所以必须到docker.com去找到最新的yum源进行安装 说明二: docker的安装方式有两种: 1. 从指定网站获取 ...
- .Net程序集强签名详解
强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名 ...
- Jquery获取radio单选按钮的value与后面的文字
一组单选按钮如图: <input name="classId" value="8afa94f45ba3e2c1015ba3fac6c00000" type ...
- 左列動態添加菜單Repeater
前台代碼: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="left.aspx. ...
- MS-SQL2005服务器登录名、角色、数据库用户、角色、架构的关系
MS SQL2005对2000进行了很大的改进,而用户关系这部分也变得相当复杂了,很多朋友都对此一知半解!下面,我将把我应用中总结的和大家分享下,先从概念入手,希望对不理解的朋友有点提示. 今天我们要 ...
- (一) solr的安装与配置
载solr文件压缩包,并解压 ,要运行solr服务之前需要先安装jdk,具体安装过程可以参看下面这篇文章: http://www.cnblogs.com/xiazh/archive/2012/05/2 ...
- windows 依赖查看
使用工具Download Process Explorer查看运行程序所依赖的动态库. 中文说明:适用于 Windows 的 Process Explorer 10.21 版
- 个人理解的Windows漏洞利用技术发展史
大概四.五年前,看过陈皓的酷壳上面的一篇文章,上面有一句话我一直记得,是关于学习技术的心得和态度的. 要了解技术就一定需要了解整个计算机的技术历史发展和进化路线.因为,你要朝着球运动的轨迹去,而不是朝 ...