博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1437 迈克步(单调栈)
阅读量:5319 次
发布时间:2019-06-14

本文共 1194 字,大约阅读时间需要 3 分钟。

题意:

 

思路:

单调栈题。求出以每个数为区间最大值的区间范围即可。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 using namespace std;12 typedef long long ll;13 typedef pair
pll;14 const int INF = 0x3f3f3f3f;15 const int maxn = 2*1e5+5;16 17 int n;18 int a[maxn];19 int sta[maxn];20 int l[maxn], r[maxn];21 int ans[maxn];22 23 int main()24 {25 //freopen("in.txt","r",stdin);26 while(~scanf("%d",&n))27 {28 memset(ans,0,sizeof(ans));29 for(int i=1;i<=n;i++) scanf("%d",&a[i]);30 int top = 0;31 for(int i=1;i<=n;i++)32 {33 while(top && a[sta[top]]>=a[i]) top--;34 if(top==0) l[i]=1;35 else l[i]=sta[top]+1;36 sta[++top]=i;37 }38 top = 0;39 for(int i=n;i>=1;i--)40 {41 while(top && a[sta[top]]>a[i]) top--;42 if(top==0) r[i]=n;43 else r[i]=sta[top]-1;44 sta[++top]=i;45 }46 for(int i=1;i<=n;i++)47 ans[r[i]-l[i]+1]=max(ans[r[i]-l[i]+1],a[i]);48 for(int i=n-1;i>=1;i--)49 ans[i]=max(ans[i],ans[i+1]);50 for(int i=1;i<=n;i++)51 printf("%d%c",ans[i],i==n?'\n':' ');52 }53 return 0;54 }

 

转载于:https://www.cnblogs.com/zyb993963526/p/7634149.html

你可能感兴趣的文章
深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]
查看>>
JDK中DNS缓存的分析
查看>>
Objective-C中的@property和@synthesize用法
查看>>
一位面试者提到直接调用vuex中mutations方法
查看>>
动态加载vs静态加载
查看>>
(7)关于margin的一些想法2.0
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
一些有意思的算法代码[转载]
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>
mysqlslap 压力测试工具
查看>>
DWR与Spring结合
查看>>
[转]Eclipse下导入外部jar包的3种方式
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
连续数字或英文字符文本强制换行
查看>>
DevExpress Carousel 设置水平滑动列表
查看>>