bzoj 2276: [Poi2011]Temperature

bzoj 2276: [Poi2011]Temperature

大家好,又见面了,我是全栈君。

2276: [Poi2011]Temperature

Time Limit: 20 Sec  Memory Limit: 32 MB

Submit: 749  Solved: 344

[
Submit][
Status][
Discuss]

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
bzoj 2276: [Poi2011]Temperature
bzoj 2276: [Poi2011]Temperature

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1000010;
int a[N],b[N],q[N],f[N];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d %d",&a[i],&b[i]);
    int tail=0,head=1,ans=0;
    f[0]=1;
    for(int i=1;i<=n;i++)
    {
        while(tail>=head&&a[q[tail]]<=a[i]) tail--;
        q[++tail]=i;
        f[i]=f[i-1];
        while(a[q[head]]>b[i]) f[i]=q[head++]+1;
    }
    for(int i=1;i<=n;i++) ans=max(ans,i-f[i]+1);
    printf("%d",ans);
    return 0;
}

View Code

单调队列!!!

difficult.

转载于:https://www.cnblogs.com/12fs/p/7545261.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108152.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • zergRush (CVE-2011-3874) 提权漏洞分析

    zergRush (CVE-2011-3874) 提权漏洞分析转战Android试水老洞,zergRush(CVE-2011-3874)ROOT提权漏洞原理的技术分析。

    2022年7月2日
    23
  • Linux虚拟主机通过FTP软件创建目录时提示550 Create Directory Operation Failed

    Linux虚拟主机通过FTP软件创建目录时提示550 Create Directory Operation Failed

    2021年10月7日
    55
  • Linux学习——Shell基础[通俗易懂]

    Shell 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至编写一些程序。Shell 还是一个功能强大的编程,易编写、易调试、灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。用户通过shell向Linux内核发指令,Linux内核通过shell将返回

    2022年2月26日
    50
  • vue中watch的用法

    vue中watch的用法当 vue 项目中需要对某个值进行监听做一些操作的时候我们会用到 watch 进行监听 1 监听普通属性 单一字符串 布尔值 等等 data return dvid goodsInfo userInfo closeTime 0 关仓倒计时 watch closeTime newVal oldVal console log newVal oldVal

    2025年6月21日
    1
  • 前端程序员简历制作建议「建议收藏」

    前端程序员简历制作建议「建议收藏」大家好,我是漫步,今天来分享一下前端程序员简历该怎么写昨天的抽奖活动还在进行中,去看看吧排版工整好的简历,万里挑一,HR每天要看上百份简历,一份排版工整、段落错落有致、文字简洁分明的简历…

    2022年10月6日
    1
  • 二叉树中序遍历_二叉树的中序序列

    二叉树中序遍历_二叉树的中序序列二叉树是一种重要的数据结构,对于二叉树的遍历也很重要。这里通过三种方法简单介绍一下二叉树的中序遍历。中序遍历就是先遍历二叉树的左子树,然后遍历根节点,最后遍历右子树。例如下面的二叉树,中序遍历的结果如下:[5,10,6,15,2]对于中序遍历,直观上的结果就是将二叉树所有节点投影到下面的一条直线上,得到的顺序就是二叉树的中序遍历结果。1、递归法递归方法是最容易想到的方法。递归调用遍历方法先遍历左子

    2022年9月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号