欲望以提升热忱,毅力以磨平高山!|

XichenOC

园龄:1个月粉丝:4关注:0

2025-01-20 19:33阅读: 3评论: 0推荐: 0

P3522 [POI2011] TEM-Temperature

P3522 [POI2011] TEM-Temperature

题目翻译:

给定每一天温度的可能区间,求最长的一段时间,使其每天可能的温度不下降。

思路分析:

我们可以发现,若某一天可以加入前面的区间。那他的最高温度一定大于之前区间内最低温度的最大值(显而易见,若小于,那这段的温度一定下降)所以我们只需要找到满足这个条件的最大区间即可。动态维护区间的最小值,显然可以用单调队列。

实现:

用队头维护最近的最小值最大值,从队尾往前找到第一个符合当前的最高温度大于该天最小温度的时期。(由于该天前面的区间也符合要求,所以最终答案是 ans=max(ans,i-q[l-1]))。最后输出即可。

完整代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int q[N],mi[N],mx[N];
int main(){
	int n,ans=0;
	scanf("%d",&n);
	for(int i=1,l=1,r=0;i<=n;i++){
		scanf("%d%d",&mi[i],&mx[i]);
		while(l<=r && mx[i]<mi[q[l]]){
			l++;
		}
		if(l>r)ans=max(ans,1);
		else ans=max(ans,i-q[l-1]);
		while(l<=r && mi[q[r]]<mi[i])r--;
		q[++r]=i;
	}
	printf("%d",ans);
}

本文作者:XichenOC

本文链接:https://www.cnblogs.com/XichenOC/p/18682403

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   XichenOC  阅读(3)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起