Description

约翰决定培育新的玉米品种以提高奶牛的产奶效率。约翰所有的土地被分成 N ×N 块,其中第 r行第 c 列的玉米质量为 Ar,c。他打算找一块质量比较均匀的土地开始自己的实验。经过前期考察,他已经锁定了 K 片区域作为实验基地的候选,其中第 i 片区域是从 Ri 行 Ci 列开始,到 Ri + B − 1 行Ci +B −1 列结束的一个 B ×B 的区域。请帮助约翰计算一下,在这些候选区域里,玉米的最高质量与最低质量之差分别是多少。

Input Format

• 第一行:三个整数 N,B 和 K,1 ≤ B ≤ N ≤ 250,1 ≤ K ≤ 10^5

• 第二行到 N +1 行:第 i+1 行有 N 个整数,分别表示 Ai,1 到 Ai,N,对所有 1 ≤ j ≤ N,满足0 ≤ Ai,j ≤ 250

• 第 N + 2 行到第 N + K + 1 行:第 N + i + 1 行有两个整数 Ri 和 Ci,1 ≤ Ri,Ci ≤ N

Output Format

• 第一行到第 K 行:第 i 行表示第 i 片候选区域中最高质量与最低质量之差

Solution

显然的单调队列,\(mx[i][j]\)表示第\(i\)行区间\([j-b,j]\)的最大值,\(mi[i][j]\)同理,写个单调队列即可,

时间复杂度\(O(n^2)\),

Code

#include <cstdio>
#include <algorithm>
#include <list>
#define N 260
using namespace std; list<int> Qmx,Qmi;
int n,b,k,A[N],mx[N][N],mi[N][N]; inline int read() {
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch = getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch = getchar();}
return x*f;
} int main(){
n=read(),b=read(),k=read();
for(int i=1;i<=n;++i){
Qmx.clear();Qmi.clear();
for(int j=1;j<=n;++j){
A[j]=read();
while(!Qmx.empty()&&A[Qmx.back()]<=A[j]) Qmx.pop_back();
Qmx.push_back(j);
while(!Qmx.empty()&&Qmx.front()<=j-b) Qmx.pop_front();
mx[i][j]=A[Qmx.front()]; while(!Qmi.empty()&&A[Qmi.back()]>=A[j]) Qmi.pop_back();
Qmi.push_back(j);
while(!Qmi.empty()&&Qmi.front()<=j-b) Qmi.pop_front();
mi[i][j]=A[Qmi.front()];
}
} while(k--){
int x=read(),y=read();
int Max=-1e9,Min=1e9;
for(int i=x;i<=x+b-1;++i){
Max=max(Max,mx[i][y+b-1]);
Min=min(Min,mi[i][y+b-1]);
}
printf("%d\n",Max-Min);
}
return 0;
}

[USACO]玉米实验(单调队列)的更多相关文章

  1. 【USACO】玉米实验(单调队列)

    Description 约翰决定培育新的玉米品种以提高奶牛的产奶效率.约翰所有的土地被分成 N ×N 块,其中第 r行第 c 列的玉米质量为 Ar,c.他打算找一块质量比较均匀的土地开始自己的实验.经 ...

  2. 【USACO】又买饲料 单调队列dp

    题目描述 约翰开车回家,又准备顺路买点饲料了(咦?为啥要说“又”字?)回家的路程一共有 E 公里, 这一路上会经过 N 家商店,第 i 家店里有 F i 吨饲料,售价为每吨 C i 元.约翰打算买 K ...

  3. USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)

    https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上 ...

  4. 单调队列(数列中长度不超过k的子序列和的最值)

    ★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...

  5. [acmm week12]二分+dp+单调队列

    1004 抄作业         Time Limit: 1sec    Memory Limit:256MB Description Zfree虽然平时很爱学习,但是他迫于生活所迫(比如设计cpu实 ...

  6. 单调队列练习题(oj p1157 p1158 p1159)

    p1157是很气人的...自从评测机挂了后,速度就特别慢,cin已经过不了了,然而我不知道,就各种**的提交 惨兮兮惨兮兮,这还是开了小号(通过率堪忧.jpg...)... 思路就是单调队列维护,用队 ...

  7. [bzoj4698][Sdoi2008]Sandy的卡片_后缀数组_二分/单调队列_双指针

    Sandy的卡片 bzoj-4698 Sdoi-2008 题目大意:题目链接. 注释:略. 想法: 这个题跟一个Usaco的题特别像.我们把这些串差分 现在我们要求的就是公共子串且出现次数不少于$k$ ...

  8. BestCoder Round #89 B题---Fxx and game(单调队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945     问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路:  B ...

  9. 单调队列 && 斜率优化dp 专题

    首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...

随机推荐

  1. JAVA 集合类小结

    一 集合和数组 因为本人也是个go的爱好者,所以对于集合类算是摸的比较透的. 说到集合,必须了解数组和集合. Java的数组长度固定,集合长度不定.集合是特定的数据结构的集合. 而go里面并没有集合, ...

  2. Unity3d开发的第一个实例

    1.untiy3d开发环境配置好以后,开始我的第一个开发实例 2.在Hirearch---create---3DObject---Cube,在场景中创建一个正方体 3.project---create ...

  3. jQuery 结构的实现思路

    前提: 使用 JS 创建对象的最优办法,是 原型模式.   step1: 原型模式的基础使用方式     function fn(){}     fn.prototype = {}       var ...

  4. Mysql5.7.6安装和主从配置手册

    Mysql5.7.6+ 安装手册 linux server版本   1.下载 http://dev.mysql.com/downloads/mysql/#downloads  2. 检查库文件是否存在 ...

  5. 功放TAS5719耳机POP noise分析 对策

    驱动功放时,遇到POP noise 是常见的问题,以前遇到此问题,首先想到的对策就是mute the output.本人一直来对此种解法感觉不爽,心里不快.最近遇到开机时耳机有很强的POP,决定好好研 ...

  6. ElasticSearch 5学习(5)——第一个例子

    想要知道ElasticSearch是如何使用的,最快的方式就是通过一个简单的例子,第一个例子将会包括基本概念如索引.搜索.和聚合等,需求是关于公司管理员工的一些业务. 员工文档索引 业务首先需要存储员 ...

  7. TestNG并发测试包

    https://www.yiibai.com/testng/basic-annotations.html

  8. HDU4417 线段树 + 离线处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 , 线段树(或树状数组) + 离线处理 最近看了几道线段树的题都是需要离线处理数据的,正好这块比 ...

  9. Liunx开发(Extjs4.1+desktop+SSH2超强视频教程实践)(1)

    下周一出差宁波了,周六日就折腾点视频: 跟着视频教程开发,不过开发环境换linux,上月找工作,某个吉祥物是松鼠的公司要求用linux开发,没用过的,连面试机会都不给,极其高冷:好吧,咱就试试,用li ...

  10. IOS Quarzt2D 手动的释放

    - (void)drawRect:(CGRect)rect { // 1.获取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.绘制 ...