BZOJ2276: [Poi2011]Temperature
来源:互联网 发布:美国数据网站 编辑:程序博客网 时间:2024/05/01 21:42
题目大意:给定n个区间,你可以为每个区间选定一个这个区间里的数,求最长不下降子串
首先,一段子串[x,y]满足题意,当且仅当这段区间Li的最大值小于等于Ry并且[x,y-1]合法
所以我们根据单调性可以想到一种做法,把I从1到n扫一遍,记录一个指针j,代表以i为起始的最远右端点,然后每次向右扩展的时候用线段树查询一下区间最大值判断可不可行
于是TLE了
然后改成RMQ,虽然还是O(NlogN)但是常数小
然后MLE了
那就只能想O(N)做法了,我们发现他其实只是要求区间最大值,并且两个端点都是单调的,这样我们可以用一个单调队列来解决
具体看代码
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define N 1000010using namespace std;int a[N],b[N];int q[N],h,t;int main(){int n,m;scanf("%d",&n);int i,j,k;for(i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);j=1;int ans=0;a[0]=-1e9-1;b[n+1]=1e9+1;q[1]=1;h=t=1;for(i=1;i<=n;i++){if(j==i) j=i+1;if(q[h]==i-1) h++;while(j<=n&&a[q[h]]<=b[j]){while(h<=t&&a[q[t]]<=a[j]) q[t]=0,t--;t++;q[t]=j;j++;}ans=max(ans,j-i);}printf("%d",ans);}
0 0
- bzoj2276【poi2011】Temperature
- BZOJ2276: [Poi2011]Temperature
- BZOJ2276 [Poi2011]Temperature
- 【bzoj2276】[Poi2011]Temperature
- [BZOJ2276][Poi2011]Temperature(单调队列)
- [bzoj2276][POI2011]Temperature(单调队列)
- bzoj2276 Temperature
- 2276: [Poi2011]Temperature
- 2276: [Poi2011]Temperature 单调队列
- BZOJ 2276 Poi2011 Temperature 单调队列
- BZOJ 2276: [Poi2011]Temperature|单调队列
- bzoj 2276: [Poi2011]Temperature(单调队列)
- 【bzoj 2276】[Poi2011]Temperature(单调队列)
- 【BZOJ 2276】[Poi2011]Temperature 单调队列
- [BZOJ 2276][Poi2011]Temperature:单调队列
- bzoj 2276: [Poi2011]Temperature 单调队列
- bzoj2276
- Temperature
- maven学习笔记-基础
- Android——Json解析
- 剑指offer——二叉树的下一个节点
- HDFS详解
- qemu-kvm部分流程/源代码分析
- BZOJ2276: [Poi2011]Temperature
- 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
- 越狱相关一:注意事项
- ListView中的onItemClick无法被响应
- 【android】git常用命令合集
- (document).height()与$(window).height()
- 关于android编译速度优化
- 11个实用但你可能不知道的Python程序库
- ajax异步从前台JS传值到后台的几种方法,多个参数