【USACO】玉米实验(单调队列)
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】玉米实验(单调队列)的更多相关文章
- [USACO]玉米实验(单调队列)
		
Description 约翰决定培育新的玉米品种以提高奶牛的产奶效率.约翰所有的土地被分成 N ×N 块,其中第 r行第 c 列的玉米质量为 Ar,c.他打算找一块质量比较均匀的土地开始自己的实验.经 ...
 - 【USACO】又买饲料 单调队列dp
		
题目描述 约翰开车回家,又准备顺路买点饲料了(咦?为啥要说“又”字?)回家的路程一共有 E 公里, 这一路上会经过 N 家商店,第 i 家店里有 F i 吨饲料,售价为每吨 C i 元.约翰打算买 K ...
 - USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)
		
https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上 ...
 - 单调队列(数列中长度不超过k的子序列和的最值)
		
★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...
 - [acmm week12]二分+dp+单调队列
		
1004 抄作业 Time Limit: 1sec Memory Limit:256MB Description Zfree虽然平时很爱学习,但是他迫于生活所迫(比如设计cpu实 ...
 - 单调队列练习题(oj p1157 p1158 p1159)
		
p1157是很气人的...自从评测机挂了后,速度就特别慢,cin已经过不了了,然而我不知道,就各种**的提交 惨兮兮惨兮兮,这还是开了小号(通过率堪忧.jpg...)... 思路就是单调队列维护,用队 ...
 - [bzoj4698][Sdoi2008]Sandy的卡片_后缀数组_二分/单调队列_双指针
		
Sandy的卡片 bzoj-4698 Sdoi-2008 题目大意:题目链接. 注释:略. 想法: 这个题跟一个Usaco的题特别像.我们把这些串差分 现在我们要求的就是公共子串且出现次数不少于$k$ ...
 - BestCoder Round #89  B题---Fxx and game(单调队列)
		
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945 问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路: B ...
 - 单调队列 && 斜率优化dp 专题
		
首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...
 
随机推荐
- Winform 中  dataGridView 导出到Excel中的方法总结
			
最近,在做CS端数据导出到Excel中时网上找了很多代码感觉都不是自己想要的,通过自己的整理归纳得到一个比较通用的方法,就给大家分享一下: 该方法需要用到两个参数(即对象),一个 DataGridV ...
 - thinkphp3.2.3的使用心得之i方法(零)
			
从模板传参到控制器 模板中代码: <volist name="list" id="vo"> <a href="__CONTROLLE ...
 - Activity讲解
			
Activity Activity 是 Android 应用的重要组成单元之一(另外三个是 Service.BroadcastReceiver 和 ContentProvider),而 Activit ...
 - zanphp 初探----安装篇
			
安装 zanphp 的安装详细步骤具体在 http://zanphpdoc.zanphp.io/,但是安装的时候,还是踩了一些坑,Mac 和 Ubuntu 我都安装过, 分享大家注意一下. PHP 版 ...
 - lodash源码分析之chunk的尺与刀
			
以不正义开始的事情,必须用罪恶使它巩固. --莎士比亚<麦克白> 最近很多事似乎印证了这句话,一句谎言最后要用一百句谎言来圆谎. 本文为读 lodash 源码的第二篇,后续文章会更新到这个 ...
 - Linux EXT 文件系统 详解
			
上几章我们讲到了Linux启动的一些问题,接下来我们来看一下硬盘分割和EXT格式文件系统的问题.前面提到了分区表的问题,分区表位于MBR, 占用64个字节.所谓的硬盘分区也就是对硬盘进行规划,填写分区 ...
 - 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
			
目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构 前言 学习Python也有一个半月时间了,学到现在感觉 ...
 - NTP时间同步 服务端 客户端 自动化安装配置
			
NTP时间同步 服务端 客户端 自动化安装配置 原创内容 http://www.cnblogs.com/elvi/p/7657994.html #!/bin/sh #运行环境 centos6.cent ...
 - Mysql 表分区和性能
			
以下内容节选自<Mysql技术内幕InnoDB存储引擎> mysql表分区: 分区功能并不是所有存储引擎都支持的,如CSV.MERGE等就不支持.mysql数据库支持的分区类型为水平分区( ...
 - 【hdu3367】Pseudoforest(伪森林)
			
http://acm.hdu.edu.cn/showproblem.php?pid=3367 题目大意 伪森林就是一个无向图,这个无向图有多个连通块且每个连通块只有一个简单环. 给你一个无向图,让你找 ...