U4792 Acheing

    • 5通过
    • 43提交
  • 题目提供者Acheing
  • 标签
  • 难度尚无评定

提交

最新讨论

  • 暂时没有讨论

题目背景

题目并没有什么含义,只是想宣传一下自己的博客,Acheing.com

题目描述

给你一个n*m的矩阵,请你求出其中边长为k的子矩形,使得这个矩形中最大值减最小值最小。

输入输出格式

输入格式:

n,m,k 接下来一个n*m的子矩阵.

输出格式:

一个数,即最小值.

输入输出样例

输入样例#1:

5 4 2
1 2 5 6
0 17 16 0
16 17 2 1
2 10 2 1
1 2 2 2
输出样例#1:

1

说明

1<=n,m<=1000

1<=k<=min(n,m)

//单调队列运用 解决二维线段树超时的问题
#include<cstdio>
#include<algorithm>
using namespace std;
inline int read(){
register int x=;bool f=;
register char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
}
const int N=;
int n,m,w,ans=0x7fffffff;
int a[N][N];
int qmax[N],qmin[N],tmax,tmin,wmax,wmin;
int maxx[N][N],minn[N][N];
int main(){
n=read();m=read();w=read();
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
a[i][j]=read();
}
}
for(int j=;j<=m;j++){
tmax=tmin=;
wmax=wmin=;
for(int i=;i<=n;i++){
if(i-qmax[tmax]+>w) tmax++;
for(;tmax<=wmax&&a[i][j]>=a[qmax[wmax]][j];wmax--);
qmax[++wmax]=i;
if(i-qmin[tmin]+>w) tmin++;
for(;tmin<=wmin&&a[i][j]<=a[qmin[wmin]][j];wmin--);
qmin[++wmin]=i;
if(i>=w) maxx[i][j]=a[qmax[tmax]][j],minn[i][j]=a[qmin[tmin]][j];
}
}
for(int i=w;i<=n;i++){
tmax=tmin=;
wmax=wmin=;
for(int j=;j<=m;j++){
if(j-qmax[tmax]+>w) tmax++;
for(;tmax<=wmax&&maxx[i][j]>=maxx[i][qmax[wmax]];wmax--);
qmax[++wmax]=j;
if(j-qmin[tmin]+>w) tmin++;
for(;tmin<=wmin&&minn[i][j]<=minn[i][qmin[wmin]];wmin--);
qmin[++wmin]=j;
if(j>=w) ans=min(ans,maxx[i][qmax[tmax]]-minn[i][qmin[tmin]]);
}
}
printf("%d",ans);
return ;
}

洛谷 U4792 Acheing 单调队列的更多相关文章

  1. 【洛谷】【单调队列】P2032 扫描

    [题目描述:] 有一个 1 ∗ n 的矩阵,有 n 个正整数. 现在给你一个可以盖住连续的 k 的数的木板. 一开始木板盖住了矩阵的第 1 ∼ k 个数,每次将木板向右移动一个单位,直到右端与第 n ...

  2. 滑动窗口-洛谷T1866(单调队列)

    咕咕咕 单调队列板子题 一.基本 1.单调队列: 特殊的双端队列,内部元素.分为最大队列(单调递增)和最小队列(单调递减)两种 二.应用 本题中:大部分单调队列优化的动态规划问题都和定长连续子区间的最 ...

  3. 洛谷P2827 蚯蚓(单调队列)

    题意 初始时有$n$个蚯蚓,每个长度为$a[i]$ 有$m$个时间,每个时间点找出长度最大的蚯蚓,把它切成两段,分别为$a[i] * p$和$a[i] - a[i] * p$,除这两段外其他的长度都加 ...

  4. P1091 合唱队形题解(洛谷,动态规划LIS,单调队列)

    先上题目 P1091 合唱队形(点击打开题目) 题目解读: 1.由T1​<...<Ti​和Ti​>Ti+1​>…>TK​可以看出这题涉及最长上升子序列和最长下降子序列 2 ...

  5. 【洛谷】【单调栈】P4333 [COI2007] Patrik

    --接上一篇题解,[洛谷][单调栈]P1823音乐会的等待 关于题目大意在上一篇题解里已经说清楚了,这里不再多阐述 想看题目->戳这里 [算法分析:] 在对元素a进行判断时,如果它与栈顶元素相等 ...

  6. 【洛谷】【单调栈】P1901 发射站

    [题目描述:] 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发 ...

  7. 【洛谷】【单调栈】P1823 音乐会的等待

    [题目描述:] N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见 ...

  8. 【洛谷P1091】合唱队列

    题目大意:给定一个有 N 个正整数的序列,从其中拿走一些数,使得剩下的数满足严格单峰性,即先严格递增后严格递减,允许单调增和单调减,求最少需要拿走多少数. 题解:先考虑严格单调的情况,最少需要拿走多少 ...

  9. Bzoj1692 洛谷P2870 [Usaco2007 Dec]队列变换

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1570  Solved: 656 Description FJ打算带他的N(1 <= N <= ...

随机推荐

  1. [UITableView _endCellAnimationsWithContext:]

        由于项目需要,做一个UITableView来实现删除功能. 1.TableView是分组的. 2.点击删除按钮后,某行被删除.   出现:[UITableView _endCellAnimat ...

  2. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息

    一,在AppDelegate.m中写入如下代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...

  3. git 错误:

    git  错误: $ git commit -afatal: Unable to create 'e:/git/Android/XXXXXX/.git/index.lock': File exists ...

  4. JSON TO NSDictionary Mac & iOS

    NSString * jsonPath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Cont ...

  5. #VSTS日志# 2015/12/10 – 终于可以删除工作项了

    最近的更新不少,废话少说,直接上干货 定制工作项字段 本周的更新后,所有的用户都可以在vsts上直接给工作项添加字段了,具体内容包括– 添加新字段(日期,字符串,整形,数字)– 字段显示位置配置– 过 ...

  6. json对象转为字符串,当做参数传递时加密解密

    [son对象  字符串 互相转行] 比如我有两个变量,我要将a转换成字符串,将b转换成JSON对象: var a={"name":"tom","sex ...

  7. git merge git pull时候遇到冲突解决办法git stash

    在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...

  8. c#实现清理回收站垃圾

    /// <summary> /// 清理回收站垃圾 /// </summary> /// <param name="sender"></p ...

  9. android ProgressDialog 正在载...Loading...

    final ProgressDialog pd = new ProgressDialog(mContext); pd.setMessage("正在加载..."); pd.show( ...

  10. ARC的原理详解

    1,ARC的本质 ARC本质是NSAutoreleasePool的直接应用, @autorelease{ return UIApplicationMain(argc, argv, nil, NSStr ...