做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 单调队列的更多相关文章

  1. BZOJ 4385 单调队列

    思路: 对于每一个r 要找最小的符合条件的l最优 这时候就要找在这个区间中 d长度的和的最大值 用单调队列更新就好了 //By SiriusRen #include <cstdio> #i ...

  2. bzoj 3126 单调队列优化dp

    能转移的最左是其左边完整区间的最右左端点,最右是能覆盖它的最左左端点-1 #pragma GCC optimize ("O3") #include<cstdio> #i ...

  3. BZOJ 3831 单调队列DP

    思路: 这好像是我刚学单调性的时候做的题 (我是不会告诉你 我被这题教做人了的...) i-stk[head]>k 删队头 f[stk[tail]]>f[i]||(f[stk[tail]] ...

  4. BZOJ 2096 单调队列

    思路: 偷懒用的STL //By SiriusRen #include <deque> #include <cstdio> using namespace std; struc ...

  5. BZOJ 1012 单调队列+二分

    思路: 维护一个单减的序列 序号是单增的 每回二分查找第一个比询问的大的值 我手懒 用得lower_bound //By SiriusRen #include <cstdio> #incl ...

  6. [BZOJ 1047] [HAOI2007] 理想的正方形 【单调队列】

    题目链接:BZOJ - 1047 题目分析 使用单调队列在 O(n^2) 的时间内求出每个 n * n 正方形的最大值,最小值.然后就可以直接统计答案了. 横向有 a 个单调队列(代码中是 Q[1] ...

  7. BZOJ 1047 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...

  8. BZOJ 1047 理想的正方形(单调队列)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1047 题意:给出一个n*m的矩阵.在所有K*K的子矩阵中,最大最小差值最小的是多少? 思 ...

  9. bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp

    题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2369  Solved: 1266[Submi ...

随机推荐

  1. WIN下的CMD下载命令

    certutil -urlcache -split -f 远程地址 本地保存的文件跑径与文 件名 # 如里不写本地文 件名与路径名, 会自动跟远程文 件名相同, 并保存到当前目 录下 另一个是: bi ...

  2. LINUX修改、增加IP的方法,一张网卡绑定多个IP/漂移IP【转】

    临时增加IP命令:ifconfig eth0:1 ip地址 netmask 子网码 broadcast 广播地址 gateway 网关  ifconfig eth0:1 10.1.104.65 net ...

  3. Web Api - HttpMessageHandler 学习

    参考: 1.http://www.cnblogs.com/chenboyi081/p/4995252.html 2.http://www.cnblogs.com/r01cn/archive/2012/ ...

  4. 使用Dockerfile构建docker lnmp环境

    一.mysql 1.创建 Dockerfile mkdir mysql # 创建一个目录存放之后的Dockerfile,目录名无所谓 cd mysql # 进入目录 vi Dockerfile # 创 ...

  5. Python 离线环境

    一.应用场景 比如:对于数据安全要求比较严格的机房,服务器是不允许上网的.那么我现在开发了一套python程序,需要一些模块,怎么运行? 二.离线包制作 有2个解决方案: 1. 使用requireme ...

  6. 两类for循环

    九.两类for循环 (一)穷举 1.格式 for (初始条件;循环条件 ;循环改变) { for (初始条件;循环条件;循环改变) { for (初始条件;循环条件;循环改变) { if (判断条件) ...

  7. CCF CSP 201703-5 引水入城(50分)

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-5 引水入城 问题描述 MF城建立在一片高原上.由于城市唯一的水源是位于河谷地带的 ...

  8. 成功实施的APS项目故事分享---如何管理与激励APS项目团队

    故事背景 A企业是易普优APS重要客户之一,是某行业的龙头企业:APS项目历时7个月顺利上线,十个月验收!通过易普优APS的顺利实施,建成了集团的精益计划管控运营平台,树立计划的权威与指挥棒作用,让物 ...

  9. AlexNet的参数优化

    优化算法的参数 论文中使用SGD算法,基本参数设置在前面优化算法的总结中已经提到了.这里要说几个个人体会. a. 原文中输入的batch数目是256,应该Alex经过调节后的结果,我实际用到的机器性能 ...

  10. bzoj 3676 后缀自动机+马拉车+树上倍增

    思路:用马拉车把一个串中的回文串个数降到O(n)级别,然后每个串在后缀自动机上倍增找个数. #include<bits/stdc++.h> #define LL long long #de ...