题目链接

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. RenderSprite小记

    类型定义: /** @private */ public static const IMAGE:int = 0x01; /** @private */ public static const ALPH ...

  2. SICP读书笔记 3.3

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  3. CocoStuff—基于Deeplab训练数据的标定工具【一、翻译】(未完)

    一.CocoStuff简介 CocoStuff是一款为deeplab设计的,运行在Matlab中的语义标定工具,其标定结果和结合Deeplab训练出的结果均为mat文件格式,该项目源码已在github ...

  4. 图解Raid5数据存储的原理

  5. 对cnblogs.com的用户体验

    1.你是什么样的用户, 有什么样的心理, 对cnblogs 的期望值是什么? 我们是计算机专业学生,是奔向神奇的代码世界的旅人.希望在cnblogs上找到自己感兴趣的技术,并学到更多的知识,提升自己的 ...

  6. EDK_II环境搭建与测试

    一. 环境准备 Windows 10 (64位)专业版 Visual Studio 2010旗舰版(默认路径安装) Mscrosoft SDKs 7.0A BIOS综合包里的EDK开发环境 二. 实验 ...

  7. GITHUB随笔 15-5月 junit

    junit 是用来做单元测试的一个工具  测试是一个持续的过程.也就是说测试贯穿与开发的整个过程中,单元测试尤其适合于迭代增量式的开发过程. @ignore:   该元数据标记的测试方法在测试中会被忽 ...

  8. 编程之法section II: 2.2 和为定值的两个数

    ====数组篇==== 2.2 求和为定值的两个数: 题目描述:有n个整数,找出其中满足两数相加为target的两个数(如果有多组满足,只需要找出其中一组),要求时间复杂度尽可能低. 解法一: 思路: ...

  9. 作业6 团队项目之(开始第一个Sprint)

    一.模仿并超越--类似应用. 五个app:1.四则运算小学堂(500-999次下载 3.57M) 2.小学生算术练习(9000+次下载 232K) 3.小学生加减题生成练习工具(2万-3万次下载 1. ...

  10. “四则运算生成程序——GUI支持和部分功能改进”链接

    项目成员:张金生     张政 <正文随笔发布在张金生博客中> 四则运算生成程序——GUI支持和部分功能改进