
Codeforces Round #305 (Div. 1) B. Mike and Feet(单调栈)
题意:给定一个数组,要你选连续x个数的最大值是多少?(一个数组的最大值定义为这个数组的元素的最小值)。 思路:我们可以用单调栈来维护每个元素的连续区间长度,那么我们先考虑每个数前面的,如果栈内元素是1 2 5 6,现在的元素是4,那么很明显5和6都要被弹出去,那么这个时候包含了5和6这两个元素的区间长度他们的最小值是不是都可以变为4了呀,如果5的连续区间是1,6的连续区间是2,那么长度为1的和长度区间为3的最小值是不是就可以更新为4了?我们就这样依次动态更新,不过再最后的时候我们要多加一个尾元素0,如果不加的话会产生什么后果呢?就是会更新不到后面的情况,我们刚刚做的都是当前这个数左侧的情况,这个数右侧的情况会忽略。
发布日期:2021-05-08 15:18:22
浏览次数:12
分类:精选文章
本文共 901 字,大约阅读时间需要 3 分钟。

#includeusing namespace std;typedef long long ll;const int maxn=2e5+5;stack >s;//first存下标,second存连续区间长度 int n,a[maxn],ans[maxn]={ 0},minn=1e9+1,maxx=0;int main(){ scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]),minn=min(minn,a[i]),maxx=max(maxx,a[i]); a[++n]=0; for(int i=1;i<=n;++i) { int len=0; while(!s.empty()&&a[s.top().first]>=a[i]) { ans[len+s.top().second]=max(ans[len+s.top().second],a[s.top().first]); len+=s.top().second; s.pop(); } s.push({ i,len+1}); } for(int i=n-1;i>=1;--i) ans[i]=max(ans[i],ans[i+1]); for(int i=1;i
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月16日 03时17分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
DCMTK:存储服务类用户(C-STORE操作)
2019-03-14
带照片捕捉功能的ESP32-CAM PIR运动检测器
2019-03-15
如何使用SSH远程管理Linux服务器
2019-03-15
降级到旧版本macOS的3种方法
2019-03-15
学习Vue.js2.0(国外视频教程)
2019-03-15
在FPGA板上实现数字时钟的VHDL代码
2019-03-15
wxPython和PyOpenGL视频
2019-03-15
在30分钟内学习PHP
2019-03-15
Python http.server 服务器
2019-03-15
Python svm 支持向量机
2019-03-15
OpenStack 最小化安装配置(一):物理机网桥配置
2019-03-15
PS快速美白照片
2019-03-15
ubuntu 16.04 镜像下载
2019-03-15
CUDA9.1、cuDNN7在Ubuntu16.04上的安装
2019-03-15
微信小程序云开发:怎么删除云函数?已解决
2019-03-15
什么是句柄(经典)
2019-03-15
第一次被黑
2019-03-15