单调队列:temperature
题目大意:某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内。
求最长的连续的一段,满足该段内可能温度不降。
第一行n
下面n行,每行l_i,r_i
1<=n<=1000000
一行,表示该段的长度
Sample Input
6
6 10
1 5
4 8
2 5
6 8
3 5
Sample Output
4
知识点:递推,单调队列
#include<bits/stdc++.h>
using namespace std;
queue<int> Q;
int l[],r[];
int q[];
int N,t;
int MAX,ans,head,tail;
int main(){
//freopen("temperature.in", "r", stdin);
//freopen("temperature.out", "w", stdout);
cin>>N;
for(int i=;i<=N;i++)
scanf("%d%d",&l[i],&r[i]);
/*
单调队列分析:
1.什么情况下时间断裂:当你要加入的第i天,其r[i]<l[j](前几天中的l),这个时候,
要先更新答案,再从把第i天卡死的离第i天最近的一天重新计数
2.用一个不下降单调队列来操作,有一个关键:假设某一段时间的l值为 55 53 48 37
36 35 34 32 29 下面一天l值为45 则此队列更新为55 53 48 45。。。因为温度45
的天数靠后而且l值高,若这一天可以,则前六天一定可以,所以使队列元素为55 53 48 45.
但这样还不行,无法确定天数信息,所以让q[]保存天
数,利用l[q[head]]来调用,更新q就是更新l数组,反正是
O(n)地从前向后扫一遍,不影响答案
*/
head=;tail=;
for(int i=;i<=N;i++){
while(l[q[head]]>r[i]&&head<=tail) //q是单调减队列,如果当前的l[q[head]]>r[i]
head++; //则这一天不能从第q[head]天接上 因此继续向后
//找,直到l[q[head]]<r[i],由于是单调队列,所以
//后面几天一定可以 if(head<=tail)//更新ans
ans=max(ans,i-q[head]+); int t=i;
while(l[i]>l[q[tail]]&&head<=tail)
t=q[tail],tail--;
l[t]=l[i];
q[++tail]=t;
}
cout<<ans;
return ;
}
单调队列:temperature的更多相关文章
- BZOJ2276 [Poi2011]Temperature 【单调队列】
题目链接 BZOJ2276 题解 一开始看错题,以为求的是可以不连续的,想出一个奇怪的线段树,发现空间根本开不下?? 题目要我们求连续的最长可能不下降区间 对于区间\([l,r]\)如果合法,当且仅当 ...
- bzoj2276: [Poi2011]Temperature(单调队列/堆)
这题有两种写法,而且是完全(几乎?)不一样的写法...并不是换了个方法来维护而已 单调队列O(N):用一个队列维护a[]的单调递减,对于每个i满足a[队头]<=b[i],然后就可以算出以每一位为 ...
- bzoj 2276 [ Poi 2011 ] Temperature —— 单调队列
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2276 维护 l 递减的单调队列,队头的 l > 当前的 r 就出队,因为不能是连续一段 ...
- BestCoder Round #89 B题---Fxx and game(单调队列)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945 问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路: B ...
- 单调队列 && 斜率优化dp 专题
首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
- BZOJ 1047 二维单调队列
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...
- 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列
第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
随机推荐
- 【转载】Java并发编程:volatile关键字解析
http://www.cnblogs.com/dolphin0520/p/3920373.html
- URI 、URL 和 URN
URI URI 是 Uniform Resource Identifier 的缩写. Uniform 统一不同类型的资源.比如 txt.mp3.jpeg 等不同的类型的资源都可以使用 URI 来标识 ...
- 后台curl网络请求
<?php //前端进行网络请求 ajax //后台进行网络请求用到两种方式 curl socket //进行网络请求的步骤 //1.初始化一个curl //2.对curl进行配置 // ...
- 多线程入门-第七章-线程的同步Synchronized
/* 异步编程模型:两个线程执行自己的,互不影响. 同步编程模型:t1和t2执行,t2必须等t1执行结束之后才能执行. 为什么要线程同步? 1.为了数据的安全,尽管应用程序的使用率降低,但是为了保证数 ...
- python基础-第十一篇-11.1JavaScript基础
JavaScript是一门解释型编程语言,主要是增强html页面的动态效果 JavaScript是有三部分组成:ECMAScript.BOM.DOM 单行注释// 多行/* */(必须是scr ...
- 剑指Offer——二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...
- Android中TextView设置最大长度,超出显示省略号
今天在项目中碰到一个问题,在一个页面的顶部的标题栏显示公司的名字,但由于公司名称较长,显示不开,影响美观.故在网上查阅资料,在此做个小的总结. TextView中有个ellipsize属性,作用是当文 ...
- golang-imagick图片去除边框(黑边,白边,),添加中文字
图片去除边框(黑边,白边) package main import ( "fmt" "github.com/gographics/imagick/imagick" ...
- 010-Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...
- 002-java语言基础
一.安装卸载 卸载:控制面板 安装:下载对应版本 注意1.安装路径→尽量不要有空格和汉字 注意2.安装之后,jre可以不用安装,jdk中含有 二.环境变量 环境变量:理解,一些快捷路径.方便快速查找应 ...