题目链接

BZOJ2276

题解

一开始看错题,以为求的是可以不连续的,想出一个奇怪的线段树,发现空间根本开不下??

题目要我们求连续的最长可能不下降区间

对于区间\([l,r]\)如果合法,当且仅当对于\(\forall i \in [l,r],\forall j < i\)满足\(l[j] <= r[i]\)

所以我们只需维护一个\(l[i]\)递减的单调队列即可

为什么是对的呢?

对于位置\(i\),显然至少取\(l[i]\),最多取\(r[i]\),如果存在\(l[j] > r[i]\)显然就不满足不下降性

我们只需证,只要该条件满足,就一定能构成连续不下降

我们先证,对于一段区间合法的\([l,r]\),至少能且一定能取到\(max\{l[i]\}\)

可以用数学归纳法证明

对于一个位置的肯定满足

假设\([l,i - 1]\)满足,那么对于位置\(i\),首先有\(r[i] > max\{l[j]\}\),所以位置\(i\)一定能接上

假若\(l[i] < max\{l[j]\}\),那么\(max\{l[j]\}\)依旧能取到

假若\(l[i] >= max\{l[j]\}\),那么\(l[i]\)变为最大值,且由此一定能取到

所以我们就证明了对于一个合法区间\([l,r]\),一定能取到\(max\{l[i]\}\)

同时就证明了,只要\(\forall i \in [l,r],\forall j < i\)满足\(l[j] <= r[i]\),就一定能拼接起来,反之不行

复杂度\(O(n)\)

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 1000005,maxm = 100005,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
return out * flag;
}
int n,l[maxn],r[maxn],v[maxn],q[maxn],head,tail,ans;
int main(){
n = read(); head = -1; tail = 0;
for (int i = 1; i <= n; i++){
l[i] = read(); r[i] = read(); v[i] = 1;
while (head <= tail && l[q[head]] > r[i]) head++;
while (head <= tail && l[q[tail]] <= l[i]) v[i] += v[q[tail]],tail--;
q[++tail] = i;
ans = max(ans,i - q[head] + v[q[head]]);
}
printf("%d\n",ans);
return 0;
}

BZOJ2276 [Poi2011]Temperature 【单调队列】的更多相关文章

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

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

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

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

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

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

  4. BZOJ2276: [Poi2011]Temperature

    2276: [Poi2011]Temperature Time Limit: 20 Sec  Memory Limit: 32 MBSubmit: 293  Solved: 117[Submit][S ...

  5. bzoj 2276 [ Poi 2011 ] Temperature —— 单调队列

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2276 维护 l 递减的单调队列,队头的 l > 当前的 r 就出队,因为不能是连续一段 ...

  6. 单调队列:temperature

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

  7. BZOJ2276:[POI2011]Temperature

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

  8. DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)

    前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [D ...

  9. [POI2011]Temperature

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

随机推荐

  1. 搭建好看的静态博客(使用Hexo进行搭建)

    经常看到大牛的博客非常的高大帅气,虽然我很渣,但是逼格不能输,所以有了以下的搭建记录. 我的成果ninwoo,喜欢的可以参考下面的记录一起来动手搞起来. 安装Git Bash 访问git下载最新版本的 ...

  2. ossec安装

    安装 安装要求 对于Unix系统来说,OSSEC只需要GNU的make.gcc和libc.推荐使用OpenSSL,但仅属于一个可选项.而且,通常您只需在一个系统上做编译操作,然后将二进制程序复制到其他 ...

  3. Bootstrap学习--栅格系统

    响应式布局页面:即同一套页面可以兼容不同分辨率的设备. Bootstrap依赖于栅格系统实现响应式布局,将一行均分为12个格子,可以指定元素占几个格子. 实现过程 1.定义容器,相当于之前的table ...

  4. 分布式高并发下全局ID生成策略

    数据在分片时,典型的是分库分表,就有一个全局ID生成的问题.单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求:   1 不能有单点故障.   2 以时间为序,或者ID里包含时间 ...

  5. Objective-C中,类方法的getter和setter可以用点运算符吗?

    Objective-C中,对象实例property的getter和setter可以使用点运算符来操作,那么类方法的getter和setter可以使用点运算吗? 答案是肯定的. 看如下代码: #impo ...

  6. Scrum立会报告+燃尽图(十二月十日总第四十一次):用户推广

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2484 项目地址:https://git.coding.net/zhang ...

  7. Thunder——Final发布

    视频: https://www.bilibili.com/video/av17008792/   视频播放截图及简要文字介绍: http://www.cnblogs.com/lick468/p/799 ...

  8. 2017秋软工 —— 本周PSP

    1. PSP 2. PSP饼图 3. 累计进度条 4. 累计折线图

  9. 用java构造一个带层次的文件目录遍历器

    import java.util.List; import java.io.File; import java.util.ArrayList; public class IteratorUtil { ...

  10. 一个web项目中间的团队管理

    一个web项目中间的团队管理     最近在参加一个比赛,我们选的题目是:MOOC大型网络在线课堂.这个题目是我们五个人都想做的,我们的成员都是志同道合的五个人.   作为团队的统率者:   定义规范 ...