当前位置: 首页 > news >正文

P3522 [POI 2011] TEM-Temperature

题目描述

给出 \(n\) 个数所在区间,求最长可能不降区间。

思路

首先,我们要解决不降的问题,如何才能保证两个相邻区间选数可能不降,不难发现,只要前一个数的最大值大于等于后一个数的最小值即可,即 \(r_{i-1} \ge l_i\)

然后,因为我们要求的是一段一段连续的区间,所以我们就要维护当前点加入后的区间头、区间尾和区间元素个数,这不就是一个滑动窗口问题嘛,我们使用单调队列来维护,当第 \(i\) 个元素入队时,如果对头元素的最小值大于当前元素最大值,那么肯定不能构成不降序列,对头元素出队,当队尾元素最小值小于当前元素最小值时,在后续匹配中一定当前元素比队尾元素更加有效,因为大于当前元素的一定也大于队尾元素,而小于当前元素的不一定小于队尾元素,所以队尾元素出队。

最后,我们考虑怎么维护区间元素个数,设区间元素个数为 \(len\),当队尾出队时,新入队的元素 \(i\) 可以理解为把上一个队尾元素挤出去了,但实际上运算时还是需要算上这个元素,那么 \(i\) 就同样也要表示队尾元素的值,队尾元素就变成了 \(i\) 元素的一部分,用 \(f_i\) 表示第 \(i\) 个元素所表示的值,那么上述过程就可以表示为 \(f_i=f_i+f_{q_{tail}}\),出队时一个元素所表示的所有值都要减去,即为 \(len=len-f_{q_{head}}\),至此,本题完。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int M=2e6+10;
int n;
int l[M],r[M];
ll f[M];
deque<int> q;
int main()
{int ans=0,len=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d",&l[i],&r[i]);}for(int i=1;i<=n;i++){f[i]=1;while(!q.empty()&&r[i]<l[q.front()]) {	len-=f[q.front()];q.pop_front();}while(!q.empty()&&l[i]>=l[q.back()]) {f[i]+=f[q.back()];q.pop_back();}q.push_back(i);len++;ans=max(ans,len);}printf("%d",ans);return 0;
}
http://www.sczhlp.com/news/99233/

相关文章:

  • 网站建设信息服务费计入什么科目百度搜搜网站自动显示图片
  • 网站建设实训的心得的体会有哪些网站用mysql
  • 广告艺术设计徐州百度关键词优化
  • 国外 家具 网站模板下载网站优化关键词排名
  • 手机配件网站模板做网站属于It行业吗
  • 上海网站制作设计公司新公司网站建设费用怎么入账
  • 中山网站设计wordpress写网页教程
  • 苏州网站制作设计投资
  • 购物网站 建设响水专业做网站
  • 小企业网站欣赏网站节点加速
  • 都昌网站建设焦作网站开发公司
  • 免费建网站服务最好的公司建筑公司企业愿景平台
  • 新都网站开发江苏省建设注册中心网站首页
  • 编程scratch网站企业所得税怎么缴纳
  • 202105_风二西_SQL基于时间盲注
  • 内蒙古城乡建设厅网站网站制作北京网站建设公司哪家好
  • 网站关键字设置十大聊天软件排行榜
  • 百度 网站 说明茂名公司网站开发公司
  • 上海高端网站建好看的知名企业网站
  • 阿里网站备案寄材料淄博易宝网站建设
  • 山东做网站建设公司制作查询网站
  • 响应式 网站建设网站建设销售前景
  • 企业模板网站建设优势分析wordpress woocommerce
  • 网站建设seo虾哥网络找国外人做网站
  • 黄山区建设学会网站四川聚顺成网络科技有限公司
  • 东莞公司高端网站建设如何设计的英文网站
  • 国内免费的建网站平台做公益选哪个网站好
  • 企业网站建设渠道网站建设推广销售话术
  • 金华建设网站的公司做的较好的拍卖网站
  • 建网站 主机sae wordpress 上传