题目链接:点击查看

题目大意:给出一个长度为 n 的数列,现在规定对于任意长度区间为 len 的答案为,所有长度为 len 的区间内的最小值的最大值,题目要求我们输出len为 1 ~ n 时的答案

题目分析:看似很复杂,其实我们只需要维护每个区间内的最小值就好了,并且顺便维护一下区间长度,如果暴力枚举每个区间显然是不行的,我们可以利用单调栈,求出每个数字左边和右边第一个比他小的数字的位置,那么由这两个位置组成的开区间内的最小值显然就是当前数字了,有了区间的两个端点区间长度也很容易计算了,O(n)计算出这些数据后,更新一下答案就好了,注意一下,因为并不是每个区间都能对应上答案的,所以最后我们还需要根据答案数组再从大到小更新一遍,因为显然如果 [ l , r ]的最小值为mmin,那么这段区间内的任意一段连续的子区间的最小值肯定不可能小于 mmin,可以利用这个性质更新没有涉及到的答案区间

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2e5+100;int a[N],L[N],R[N],ans[N];int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);stack<int>st;for(int i=1;i<=n;i++){while(st.size()&&a[st.top()]>=a[i])st.pop();if(st.size())L[i]=st.top();elseL[i]=0;st.push(i);}while(st.size())st.pop();for(int i=n;i>=1;i--){while(st.size()&&a[st.top()]>=a[i])st.pop();if(st.size())R[i]=st.top();elseR[i]=n+1;st.push(i);}memset(ans,0,sizeof(ans));for(int i=1;i<=n;i++)ans[R[i]-L[i]-1]=max(ans[R[i]-L[i]-1],a[i]);for(int i=n-1;i>=1;i--)ans[i]=max(ans[i],ans[i+1]);for(int i=1;i<=n;i++)printf("%d ",ans[i]);return 0;
}

CodeForces - 548D Mike and Feet(单调栈)相关推荐

  1. CodeForces - 1484E Skyline Photo(dp+单调栈)

    题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...

  2. CodeForces - 1407D Discrete Centrifugal Jumps(单调栈+dp)

    题目链接:点击查看 题目大意:给出 n 个大楼的高度记为 h,现在需要从第一个大楼到达第 n 个大楼,问最小步数是多少,只有满足以下条件时才能从 i 移动到 j ,设 i < j: 题目分析:无 ...

  3. CodeForces - 1313C2 Skyscrapers (hard version)(单调栈+dp/分治)

    题目链接:点击查看 题目大意:给出 n 块连续的空地可以建造摩天大楼,政府有规定,每块地最高只能建 a[ i ] 的高度,同时每栋大楼需要满足一个规则,即每栋大楼的两侧不允许同时存在比自己高的大楼,输 ...

  4. 【Codeforces 631C 】Report(单调栈,思维模拟)

    题干: Each month Blake gets the report containing main economic indicators of the company "Blake ...

  5. CodeForces - 1506G Maximize the Remaining String(单调栈+贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,假设共出现了 kkk 种字母,现在要求出一个长度为 kkk 的子序列,满足每种字母只出现一次,且字典序最大 题目分析:和之前牛客上的一道 ...

  6. 【Codeforces 549F】Yura and Developers | 单调栈、启发式合并、二分

    题目链接:https://codeforces.com/problemset/problem/549/F 题目大意: 给定一个序列和一个mod值,定义[l,r]合法当l到r的所有元素和减去其中的最大值 ...

  7. CodeForces - 817D Imbalanced Array(单调栈)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,求出所有子区间的最大值与最小值之差的和 题目分析:不难看出最大值和最小值之差的和可以拆开,拆成最大值之和与最小值之和之差,现在问题转换为如 ...

  8. Maximum Xor Secondary CodeForces - 281D (单调栈)

    Bike loves looking for the second maximum element in the sequence. The second maximum element in the ...

  9. Skyscrapers (hard version) CodeForces - 1313C2(单调栈)

    This is a harder version of the problem. In this version n≤500000 The outskirts of the capital are b ...

最新文章

  1. ArcGIS使用Python脚本工具
  2. Cloud for Customer的work center显示逻辑
  3. 计算机考试中英文打字题,五笔及中英文打字试题(2套)含答案.docx
  4. B - C语言实验——整数位
  5. java 多线程基础(一)
  6. Android开发,你应该知道的
  7. 基于ELK和Python搭建简单的监控告警系统
  8. 如何解决“呈现控件时出错”的问题(转)
  9. keil、Proteus下载及安装教程
  10. Ubuntu16.04安装微信亲测可用
  11. 0x00000004 因果推理 —— 入门学习笔记
  12. 基于android的学生考勤请假app
  13. snmp+mrtg实现对局域网内的linuxServer的监控(转)
  14. 如何将视频中的音频提取出来
  15. 公司用的非标普通自动化用单片机还是plc_自动化专业现在吃香吗?
  16. 知识库微信小程序开发
  17. Cisco实验-配置Cisco交换机
  18. 明星热图|童瑶、万茜、周冬雨、宁静、吴昕、宋威龙、李荣浩等签约新品牌...
  19. 无线网络-LTE (01) LTE Overview
  20. ognl表达式 讲解

热门文章

  1. 北京工业计算机考研科目,2020北京工业大学计算机考研初试科目、参考书目、招生人数汇总...
  2. php 如何 闭源,Linux_Debian如何安装闭源软件包有哪些方法,  在系统操作中,闭源软件 - phpStudy...
  3. 高仿真的类-请求参数映射
  4. 通过@Value + @PropertySource来给组件赋值
  5. ThreadLocal的第二种用法 part2
  6. request获取中文乱码的问题
  7. SpringBoot异常处理-@ExceptionHandler
  8. 单例设计模式-反射攻击解决方案及原理分析
  9. 多重循环控制练习之班级成绩情况
  10. php redis命令大全,redis中key相关命令详解