hdu5696区间的价值 -- 2016"百度之星" - 初赛(Astar Round2B)
2016-05-25 18:57
239 查看
Problem Description
我们定义“区间的价值”为一段区间的最大值*最小值。
一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1)。
现在聪明的杰西想要知道,对于长度为k的区间,最大价值的区间价值是多少。
当然,由于这个问题过于简单。
我们肯定得加强一下。
我们想要知道的是,对于长度为1∼n的区间,最大价值的区间价值分别是多少。
样例解释:
长度为1的最优区间为2−2 答案为6∗6
长度为2的最优区间为4−5 答案为4∗4
长度为3的最优区间为2−4 答案为2∗6
长度为4的最优区间为2−5 答案为2∗6
长度为5的最优区间为1−5 答案为1∗6
Input
多组测试数据
第一行一个数n(1≤n≤100000)。
第二行n个正整数(1≤ai≤10^9),下标从1开始。
由于某种不可抗力,ai的值将会是1∼10^9内随机产生的一个数。(除了样例)
Output
输出共n行,第i行表示区间长度为i的区间中最大的区间价值。
Sample Input
5
1 6 2 4 4
Sample Output
36
16
12
12
6
看见那鲜红的随机产生了吗?显然这是突破口(当时看着很多人A然而并没有想出来
其实对于随机数据,有些暴力的效率很高
我们枚举每一个点作为区间的最大值(所以大于这个值的都不能取),然后向两边扩展,扩展的顺序是将较大者加入区间,边做边更新答案
贪心的正确性算比较显然吧,较大值加进来肯定比较小值加进来优,因为最大值已经固定了,我们要让最小值最大
AC代码
我们定义“区间的价值”为一段区间的最大值*最小值。
一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1)。
现在聪明的杰西想要知道,对于长度为k的区间,最大价值的区间价值是多少。
当然,由于这个问题过于简单。
我们肯定得加强一下。
我们想要知道的是,对于长度为1∼n的区间,最大价值的区间价值分别是多少。
样例解释:
长度为1的最优区间为2−2 答案为6∗6
长度为2的最优区间为4−5 答案为4∗4
长度为3的最优区间为2−4 答案为2∗6
长度为4的最优区间为2−5 答案为2∗6
长度为5的最优区间为1−5 答案为1∗6
Input
多组测试数据
第一行一个数n(1≤n≤100000)。
第二行n个正整数(1≤ai≤10^9),下标从1开始。
由于某种不可抗力,ai的值将会是1∼10^9内随机产生的一个数。(除了样例)
Output
输出共n行,第i行表示区间长度为i的区间中最大的区间价值。
Sample Input
5
1 6 2 4 4
Sample Output
36
16
12
12
6
看见那鲜红的随机产生了吗?显然这是突破口(当时看着很多人A然而并没有想出来
其实对于随机数据,有些暴力的效率很高
我们枚举每一个点作为区间的最大值(所以大于这个值的都不能取),然后向两边扩展,扩展的顺序是将较大者加入区间,边做边更新答案
贪心的正确性算比较显然吧,较大值加进来肯定比较小值加进来优,因为最大值已经固定了,我们要让最小值最大
#include<cstdio> using namespace std; int a[100100],n; long long ans[100100]; void work() { for(int i = 1;i <= n;i++) scanf("%d",&a[i]); for(int i = 1;i <= n;i++) ans[i]=0; for(int i = 1;i <= n;i++) { long long max=a[i],min=a[i]; int len=1,l=i,r=i; while(1) { if(ans[len]<max*min)ans[len]=max*min; if(l==1 || a[l-1]>max) if(r==n || a[r+1]>max) break; else { r++; len++; if(a[r]<min)min=a[r]; } else if(r==n || a[r+1]>max) { l--; len++; if(a[l]<min)min=a[l]; } else { if(a[l-1]>a[r+1]) { l--; len++; if(a[l]<min)min=a[l]; } else { r++; len++; if(a[r]<min)min=a[r]; } } } } for(int i = 1;i <= n;i++) printf("%I64d\n",ans[i]); } int main(){ while(scanf("%d",&n)!=EOF) work(); return 0; }
AC代码
相关文章推荐
- 猜数字游戏
- IOS 正则基本使用
- 利用RequestMappingHandlerMapping提取Spring MVC @RequestMapping
- android和js交互
- 最长上升子序列
- 欢迎使用CSDN-markdown编辑器
- UML中的一些概念
- Py获取本机指定网卡的ip地址
- AJAX之JSON
- AJAX
- Java Web项目中实现文件下载功能的实例教程
- nginx: [warn] 4000 worker_connections exceed open file resource limit: 1024
- 【leetcode】343. Integer Break
- Android 应用性能优化-ArrayMap、SparseArray
- Jquery基础
- OC 数据结构
- BZOJ_1270_雷涛的小猫_(动态规划)
- PDO封装
- 为什么我上传了flv或MP4文件到服务器,可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢
- 打包时 bitcode 错误