2276: [Poi2011]Temperature

Time Limit: 20 Sec  Memory Limit: 32 MB
Submit: 293  Solved: 117
[Submit][Status]

Description

The
Byteotian Institute of Meteorology (BIM) measures the air temperature
daily. The measurement is done automatically, and its result immediately
printed. Unfortunately, the ink in the printer has long dried out...
The employees of BIM however realised the fact only recently, when the
Byteotian Organisation for Meteorology (BOM) requested access to that
data.

An
eager intern by the name of Byteasar saved the day, as he
systematically noted down the temperatures reported by two domestic
alcohol thermometers placed on the north and south outside wall of the
BIM building. It was established decades ago by various BIM employees
that the temperature reported by the thermometer on the south wall of
the building is never lower than the actual temperature, while that
reported by the thermometer on the north wall of the building is never
higher than the actual temperature. Thus even though the exact
temperatures for each day remain somewhat of a mystery, the range they
were in is known at least.

Fortunately
for everyone involved (except Byteasar and you, perhaps), BOM does not
require exact temperatures. They only want to know the longest period in
which the temperature was not dropping (i.e. on each successive day it
was no smaller than on the day before). In fact, the veteran head of BIM
knows very well that BOM would like this period as long as possible. To
whitewash the negligence he insists that Byteasar determines, based on
his valuable notes, the longest period in which the temperature could have been
not dropping. Now this is a task that Byteasar did not quite expect on
his BIM internship, and he honestly has no idea how to tackle it. He
asks you for help in writing a program that determines the longest such
period.

某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内。
求最长的连续的一段,满足该段内可能温度不降。

Input

In
the first line of the standard input there is one integer
n(1<=N<=1000000) that denotes the number of days for which
Byteasar took notes on the temperature. The measurements from day are
given in the line no.i+1 Each of those lines holds two integers, x and y
(-10^9<=x<=y<=10^9). These denote, respectively, the minimum
and maximum possible temperature on that particular day, as reported by
the two thermometers.

In
some of the tests, worth 50 points in total, the temperatures never
drop below -50 degrees (Celsius, in case you wonder!) and never exceeds
50 degrees (-50<=x<=y<=50)

第一行n
下面n行,每行l_i,r_i
1<=n<=1000000

Output

In
the first and only line of the standard output your program should
print a single integer, namely the maximum number of days for which the
temperature in Byteotia could have been not dropping.

一行,表示该段的长度

Sample Input

6

6 10

1 5

4 8

2 5

6 8

3 5

Sample Output

4

HINT

 

Source

题解:

类似与pilots,我们可以枚举右端点 i,那么左端点 l[i]一定是单调不减的,那么就可以使用单调队列。

那么如何判断当前连续一段是否能单调不减呢?注意到如果x能被到达,那么所有y>x也一定能到达,而x就是这一段中温度最小值的最大值!

因为在到达该点之前,必须上升到x,之后又无法下降,所以合法的下界一定是这段区域里的温度最小的最大值,当然如果该值>当前i的上界,将队首元素弹出。

也就是说维护一个最小值单调递减的单调队列。

代码:

 #include<cstdio>

 #include<cstdlib>

 #include<cmath>

 #include<cstring>

 #include<algorithm>

 #include<iostream>

 #include<vector>

 #include<map>

 #include<set>

 #include<queue>

 #include<string>

 #define inf 1000000000

 #define maxn 1000000+5

 #define maxm 500+100

 #define eps 1e-10

 #define ll long long

 #define pa pair<int,int>

 #define for0(i,n) for(int i=0;i<=(n);i++)

 #define for1(i,n) for(int i=1;i<=(n);i++)

 #define for2(i,x,y) for(int i=(x);i<=(y);i++)

 #define for3(i,x,y) for(int i=(x);i>=(y);i--)

 #define mod 1000000007

 using namespace std;

 inline int read()

 {
int x=,f=;char ch=getchar(); while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();} while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();} return x*f; }
int n,ans=,l=,r=,now,last=,a[maxn],b[maxn],q[maxn]; int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); n=read();
for1(i,n)
{
a[i]=read();b[i]=read();
while(l<=r&&a[q[r]]<=a[i])r--;
q[++r]=i;
now=last;
while(a[q[l]]>b[i])now=q[l++]+;
ans=max(ans,i-now+);
last=now;
}
printf("%d\n",ans); return ; }

BZOJ2276: [Poi2011]Temperature的更多相关文章

  1. BZOJ2276 [Poi2011]Temperature 【单调队列】

    题目链接 BZOJ2276 题解 一开始看错题,以为求的是可以不连续的,想出一个奇怪的线段树,发现空间根本开不下?? 题目要我们求连续的最长可能不下降区间 对于区间\([l,r]\)如果合法,当且仅当 ...

  2. bzoj2276: [Poi2011]Temperature(单调队列/堆)

    这题有两种写法,而且是完全(几乎?)不一样的写法...并不是换了个方法来维护而已 单调队列O(N):用一个队列维护a[]的单调递减,对于每个i满足a[队头]<=b[i],然后就可以算出以每一位为 ...

  3. BZOJ2276:[POI2011]Temperature

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...

  4. 【BZOJ2276】Temperature

    题面 Description The Byteotian Institute of Meteorology (BIM) measures the air temperature daily. The ...

  5. [POI2011]Temperature

    Description The Byteotian Institute of Meteorology (BIM) measures the air temperature daily. The mea ...

  6. BZOJ 2276: [Poi2011]Temperature 单调队列

    Code: #include<bits/stdc++.h> #define maxn 3000000 using namespace std; void setIO(string s) { ...

  7. bzoj 2276: [Poi2011]Temperature——单调队列

    Description 某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内. 求最长的连续的一段,满足该段内可能温度不降 第一行n 下面n行,每行l_i,r_i ...

  8. POI2011题解

    POI2011题解 2214先咕一会... [BZOJ2212][POI2011]Tree Rotations 线段树合并模板题. #include<cstdio> #include< ...

  9. [原博客] POI系列(4)

    正规.严谨.精妙. -POI BZOJ 1531 : [POI2005]Bank notes 裸的背包,可以二进制拆分一下.一个物品比如说有n个,可以拆成 1,2,4,8,16...个. OJ上没有样 ...

随机推荐

  1. Tomcat中Listener的使用范例(转载http://cywhoyi.iteye.com/blog/2075848)

    Tomcat是非常有名的开源容器,因其开源我们可以对其做定制化的改变,而且Tomcat在其配置文件方面做了很多注释说明摘要,帮助我们更好的定制化我们所需的功能点. New Tomcat Listene ...

  2. Linux基础系列—Linux内核源码目录结构

    /** ****************************************************************************** * @author    暴走的小 ...

  3. windows服务(Windows Installer问题,错误5:拒绝访问)

    Windows Installer问题,错误5:拒绝访问 shillan,2006-11-03 09:40:38 现象: 使用MSI文件来安装的软件在安装和卸载时系统提示:“不能访问Windows I ...

  4. 一些css小用法总结(持续更新~)

    1.用:before和:after实现小尖角效果 <div class="div"></div> .div{ background: #fff; borde ...

  5. HTML之Data URL(转)

    Data URL给了我们一种很巧妙的将图片“嵌入”到HTML中的方法.跟传统的用img标记将服务器上的图片引用到页面中的方式不一样,在Data URL协议中,图片被转换成base64编码的字符串形式, ...

  6. ORACLE调度之基于事件的调度(二)【weber出品】

    一.回顾 调度分基于时间的调度和基于事件的调度. 稍微复习一下前面的只是请浏览:<ORACLE调度之基于时间的调度(一)[weber出品]> 二.知识补充 1.队列:一种数据结构,就像一根 ...

  7. JavaScript_数组

    /** * 数组本身也是对象 * js中数组类似于java里的map容器 长度可随意改变 ,元素类型任意 * */ // var arr = new Array(); // var arr = [1, ...

  8. CSU 1616: Heaps(区间DP)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1616 1616: Heaps Time Limit: 2 Sec  Memory Lim ...

  9. ubuntu用户及用户组文件信息

    1.用户帐号文件 /etc/passwd中存放当前系统的用户列表及用户基本的设置信息: 文件中每一行对应一个用户信息,用户信息用":"来分隔,各项内容含义如下: 用户名:用户密码: ...

  10. ubuntu 更新 php5.5.9 到 php 5.6

    add-apt-repository ppa:ondrej/php5-5.6 apt-get update apt-get install php5 为了使用 add-apt-repsitory 需要 ...