Codeforces Round #305 (Div. 1) B. Mike and Feet(思路)
2016-07-26 11:14
495 查看
题目地址:http://codeforces.com/problemset/problem/547/B
思路:求出l[i],rt[i],表示a[i]作为区间【lt[i],rt[i]】内的最小值。则L=rt[i]-lt[i]+1,即为size为L的strength。ans[L]=max(ans[L],a[i]),即为size为L的最大strength。最后从后向前递推ans即可,即ans[i]=max(ans[i],ans[i+1])。
思路:求出l[i],rt[i],表示a[i]作为区间【lt[i],rt[i]】内的最小值。则L=rt[i]-lt[i]+1,即为size为L的strength。ans[L]=max(ans[L],a[i]),即为size为L的最大strength。最后从后向前递推ans即可,即ans[i]=max(ans[i],ans[i+1])。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn=2e5+50; int n; int a[maxn],lt[maxn]; int ans[maxn],rt[maxn]; int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); lt[i]=rt[i]=i; } for(int i=1; i<=n; i++) while(a[lt[i]-1]>=a[i]) lt[i]=lt[lt[i]-1]; for(int i=n; i>=1; i--) while(a[rt[i]+1]>=a[i]) rt[i]=rt[rt[i]+1]; for(int i=1; i<=n; i++) { int L=rt[i]-lt[i]+1; ans[L]=max(ans[L],a[i]); } for(int i=n; i>=1; i--) ans[i]=max(ans[i],ans[i+1]); for(int i=1; i<n; i++) printf("%d ",ans[i]); printf("%d\n",ans ); return 0; }
相关文章推荐
- JavaScript将对象转换为JSON
- js 字符串转换成数字的三种方法, 取float型小数点后两位数的方法
- 如何复制js脚本alert或者系统对话提示框的内容
- cryptos
- bootstrap源码分析之scrollspy(滚动侦听)
- <a href="javascript: ;">和<a href="#">
- PreferenceFragment详解
- Html与CSS快速入门02-HTML基础应用
- net.sf.json.JSONException: There is a cycle in the hierarchy!的解决办法
- jQuery.on() 函数详解 【转载】
- html5--导航栏制作
- get、post、ajax、getJSON四种请求方式
- css3中word-wrap的用法?
- LeetCode 19. Remove Nth Node From End of List
- 【CreateJS】WebStorm+Adobe Animate CC 搭配开发HTML5,入门教程
- 关于在JSP中使用正则表达式限制输入框输入的条件
- html页面渲染的原理及优化
- 完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
- 可视化排序
- 实习见闻(4)——bootstrap实现登陆功能