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 ...
随机推荐
- 脚本病毒分析扫描专题2-Powershell代码阅读扫盲
4.2.PowerShell 为了保障木马样本的体积很小利于传播.攻击者会借助宏->WMI->Powershell的方式下载可执行文件恶意代码.最近也经常会遇见利用Powershell通过 ...
- 全网最全JS正则表达式 校验数字
Js代码 <script type="text/javascript"> function SubmitCk() { var reg = /^([a-zA-Z0-9]+ ...
- connect系统调用
/* * Attempt to connect to a socket with the server address. The address * is in user space so we ve ...
- skb_pull skb_push skb_put
unsigned char *skb_pull(struct sk_buff *skb, int len)该函数将 data 指针向数据区的末尾移动,减少了len 字段的长度.该函数可用于从接收到的数 ...
- 003_ElasticSearch详解与优化设计
简介 概念 安装部署 ES安装 数据索引 索引优化 内存优化 1简介 ElasticSearch(简称ES)是一个分布式.Restful的搜索及分析服务器,设计用于分布式计算:能够达到实时搜索,稳定, ...
- 目标板通过nfs挂载根文件系统
目标板挂载根文件系统的方法有两种(这里所说的服务端就是ubuntu,Ubuntu已经成功安装了nfs服务,并且保证服务端与目标板ping 通) 第一种:等待开发板启动之后去挂载,此时文件系统从Flas ...
- 使用html+css+js实现3D相册
使用html+css+js实现3D相册,快来上传的照片吧 效果图: 代码如下,复制即可用: <!DOCTYPE html> <html lang="en"> ...
- Web基础 - Cookie与Session
常用的调试以及抓包工具: Wireshark tcpdump fiddler 首先弄清楚几个概念,什么是cookie,什么是session,以及为什么会有这两个东东,这两个东东的作用是什么? 这里使用 ...
- hihocoder1636 Pangu and Stones(区间DP(石子合并变形))
题目链接:http://hihocoder.com/problemset/problem/1636 题目大意:有n堆石头,每次只能合并l~r堆,每次合并的花费是要合并的石子的重量,问你合并n堆石子的最 ...
- sql server 2000系统表sysproperties在SQL 2008中无效的问题
Sqlserver有一个扩展属性系统表sysproperties,因为只接触过MSSQL2005及以后的版本,在生产库2008版本及联机文档上搜了下都找不到这个系统表,后来发现这个系统表在2005版本 ...