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

P6510 奶牛排队

如果一个人比你强比你年轻,那么你就废了!

-------单调队列


刚学完单调栈,单调队列感觉自己就算刷蓝题都没问题了,然后就被绿题打脸了(bushu

一开始看到这题迷迷糊糊就写了一个单调栈和一个单调队列组合起来的抽象代码。

底层逻辑是这样的:只要最大值的位置在最小值的右边,那么这个区间就是合法的。并且细心的打补丁把ans=1的情况算为0(读题了,但又没完全读题)

\(70pts~code:\)

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
long long n,a[100010],ans;
struct ubt{long long v,dis;};
deque <ubt> qmax,qmin;
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++){while((qmax.size()>=1)&&(qmin.size()>=1)&&qmax.front().dis<qmin.front().dis)qmax.pop_front();while((qmax.size()>=1)&&qmax.back().v<=a[i])qmax.pop_back();while((qmin.size()>=1)&&qmin.back().v>=a[i])qmin.pop_back();qmax.push_back((ubt){a[i],i});qmin.push_back((ubt){a[i],i});ans=max(qmax.front().dis-qmin.front().dis+1,ans);}if(ans==1)ans=0;cout<<ans;return 0;
}

后来发现在面对

6

1 9 3 7 6 9

这种样例是错的,又加了补丁(补丁神)

 while(qmin.size()&&qmax.size()&&a[i]==qmax.back().v){while(qmin.front().dis<=qmax.back().dis)qmin.pop_front();qmax.pop_back();}}

依旧\(70pts\)


正解

终于在查找题解,进行读天书环节后终于明白了

思路

对于一个合法区间,对于右端点i,在相较于右端点位置靠前的所有大于等于右端点的端点之后的位置即是右端点i的最优左端点
(原谅我语文不好)

所以我们只需要枚举右端点i,并且用单调栈记录我们的所有比i大的端点,以及所有可能的左端点(注意只有前面有比它大的端点,它才能成为左端点,因为比它大的点,将它于最小的点隔开了)


\(压行极简风~100pts\)

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,a[100010],mx[100010],mi[100010],xs,is,ans;
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++){while(xs&&a[mx[xs]]>=a[i])xs--;while(is&&a[mi[is]]<a[i])is--;int u=upper_bound(mx+1,mx+1+xs,mi[is])-mx;if(u!=xs+1)ans=max(ans,i-mx[u]+1);xs++;mx[xs]=i;is++;mi[is]=i;}cout<<ans;return 0;
}

1.每次记录比a[i]大的端点

2.用二分查找的方式找到距a[i]最近的大于等于它的端点(因为mi[is]肯定是第二大端点,如果不是那么在代码第10行就被淘汰了,并且如果二分查找找到的数肯定大于他,如果大于它就相当于大于等于a[i],因为它是第二大端点)

3.最后相减取max,并把i放进单调栈了,因为后面的遍历要用


ending

\(update-2026-2-6\)
更改病字和认知上的错误

http://www.jsqmd.com/news/350936/

相关文章:

  • 从UE到浏览器:如何用一套工具,让城市“安全大脑”在指挥大屏上“活”起来 - 副本
  • CANN动态shape推理:处理可变输入的高效方案
  • shell监控finebi定时调度
  • 基于大纲解析的内科主治医师考试网课推荐与测评 - 医考机构品牌测评专家
  • 马斯克的商业版图与SpaceX太空算力布局逻辑
  • 在腾讯 CloudStudio 上部署 Moltbot 接入钉钉完整教程
  • 0002__OpenCode 下载安装教程,图文详细指南
  • 执医技能考试买哪个模拟试卷好 - 医考机构品牌测评专家
  • 留学论文辅导机构对比:学术成果与服务场景全解析 - 品牌测评鉴赏家
  • 深入解析:系统架构设计师备考第65天——安全架构和模型
  • 大音琴院:深圳/香港/古筝/琵琶/二胡/小提琴/钢琴/吉他/架子鼓/音乐培训/乐器培训机构优选指南 - 海棠依旧大
  • 2026年国内屏蔽机房厂家最新TOP5推荐,高压屏蔽机房、电磁屏蔽机房、电子屏蔽机房厂家选择指南,专注防护品质,赋能多领域安全 - 海棠依旧大
  • 0001__OpenCode vs Claude Code 对比:一文介绍两者的区别
  • 区块链宕机致爆仓提现延迟成常态,Matrixdock交易平台能扛住重压吗?
  • 名家居世博园:广东东莞高端靠谱的家具家居卖场,酒店家具、会所家具、住宅家具全品类家居聚合地 - 海棠依旧大
  • 算力服务:驱动数字经济发展的核心动力与多元模式解析
  • 深耕十年,匠心育人——大音琴院打造专业音乐培训乐器培训机构 - 海棠依旧大
  • 2026年国内泵厂家TOP5盘点:潜水轴流泵、潜水混流泵、潜油电泵厂家推荐,兼顾实力与口碑,适配多场景需求 - 海棠依旧大
  • API集成平台破解数据孤岛,助力企业灵活创新
  • 成都顶呱呱投资集团有限公司:深耕代办领域,工商注册新公司、分公司、材料整理、地址提供、核名、加急服务、咨询,香港、内资、外资公司注册机构优选 - 海棠依旧大
  • 2026年国内优质泵业企业TOP5推荐,潜水泵、污水泵、海水泵、深井泵、不锈钢泵厂家推荐,覆盖多场景适配需求 - 海棠依旧大
  • 数字化时代,企业如何通过API管理平台实现系统协同与数据流转
  • 用scp命令上传文件夹到盒子
  • vue表格vxe-table 单元格拖拽复制填充功能,如何自定义某个列霍某个单元格禁止拖拽复制值,自定义扩展区域赋值方法
  • 2026年国内电磁屏蔽设备行业企业TOP5推荐,电子屏蔽机房、高压局放屏蔽机房、局放屏蔽机房厂家选择指南,专注防护品质,适配多场景需求 - 海棠依旧大
  • Top10冷冻干燥机制造商综合评测:工业与实验室设备精选指南 - 品牌推荐大师1
  • SIR-3000地质雷达信号弱处理方法
  • 法如三维激光扫描仪S350摔坏后解决方案
  • QQ像素级复刻WEB源码
  • 2026年国内减速机行业厂家TOP5推荐:行星减速机、平行轴斜齿轮减速机厂家推荐,老牌大厂与实力新锐各有专长 - 海棠依旧大