做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. Imperva正则表达式的添加以及使用

    Imperva正则表达式的添加以及使用 1.添加字典 创建策略 模拟访问产生告警

  2. Laravel 5.5 迁移报错:General error: 1215 Cannot add foreign key constraint

    问题 之前一直用的 Laravel 5.4,数据库也是直接写 sql 的,感觉可定制性更强,顺便锻炼下 sql.这次改用了 Laravel 5.5,索性用迁移建库试试,结果报错如下: SQLSTATE ...

  3. linux bash shell之declare

    一. #Set the right GC options based on the what we are runningdeclare -a server_cmds=("master&qu ...

  4. Python基础:获取平台相关信息

    Windows 10家庭中文版,Python 3.6.4, 本文介绍了使用os.platform.sys三个模块获取Python程序的运行平台相关的信息. os模块:提供 各种各样的操作系统接口 os ...

  5. MyEclipse文本对比界面样式修改

    MyEclipse刚安装好,使用文件对比的时候,发现两边的对比颜色非常浅,不同的地方不容易发现,可以通过以下配置将显示颜色调深一点. 配置 效果

  6. hihoCoder #1185 : 连通性·三(强联通分量+拓扑排序)

    #1185 : 连通性·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 暑假到了!!小Hi和小Ho为了体验生活,来到了住在大草原的约翰家.今天一大早,约翰因为有事要出 ...

  7. Android 中.aar文件生成方法与用法

    https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...

  8. mysql千万级表关联优化(2)

    概述: 交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的功能,这算是离职人员挖下的坑,随着数据越来越多,原本的SQL查询变得越来越慢,用户体验特别差,因此SQL优化任务交到了我手上. 这个 ...

  9. MySQL下concat函数中null值问题

    在mysql中,使用CONCAT(str1,str2,...)函数拼接字符串的过程中,如果你拼接的字段当中有值为null,那么拼接的结果就为null 注: select CONCAT(字段1,字段2) ...

  10. day6作业--游戏人生

    本节作业: 熟练使用类和模块,写一个交互性强.有冲突的程序. 思路: 1.各个模块之间的调用关系,如何使用类,各种方法的使用上面: 2.学了类,以为能用来解决所有问题,东西都要写在类里面: 3.下面自 ...