HDU5696:区间的价值(搜索 & 分治 & 思维)
来源:互联网 发布:young网络域名 编辑:程序博客网 时间:2024/06/14 17:43
区间的价值
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1366 Accepted Submission(s): 608
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
一个区间左端点在
现在聪明的杰西想要知道,对于长度为
当然,由于这个问题过于简单。
我们肯定得加强一下。
我们想要知道的是,对于长度为
样例解释:
长度为
长度为
长度为
长度为
长度为5的最优区间为
Input
多组测试数据
第一行一个数n(1≤n≤100000) 。
第二行n 个正整数(1≤ai≤109) ,下标从1 开始。
由于某种不可抗力,ai 的值将会是1∼109 内<b style="color:red;">随机产生</b>的一个数。(除了样例)
第一行一个数
第二行
由于某种不可抗力,
Output
输出共n 行,第i 行表示区间长度为i 的区间中最大的区间价值。
Sample Input
51 6 2 4 4
Sample Output
361612126
Source
2016"百度之星" - 初赛(Astar Round2B)
思路:这题思路比较巧妙,参考了别人的做法:大致是枚举最小值,每次更新必须包含此最小值的区间,显然有ans[i]=max(ans[i], ans[i+1]),因为数据随机,不会退化到O(n^2)。# include <iostream># include <cstdio># include <cstring>using namespace std;typedef long long LL;const int maxn = 1e5+30;LL a[maxn], ans[maxn];void dfs(int l, int r){ if(l >= r) return; int minid=0, maxid=0; for(int i=l; i<=r; ++i) { if(minid==0||a[i]<a[minid]) minid = i; if(maxid==0||a[i]>a[maxid]) maxid = i; } ans[r-l+1] = max(ans[r-l+1], a[minid]*a[maxid]); dfs(l, minid-1); dfs(minid+1, r);}int main(){ int n; while(~scanf("%d",&n)) { memset(ans, 0, sizeof(ans)); for(int i=1; i<=n; ++i) { scanf("%lld",&a[i]); ans[1] = max(ans[1], a[i]*a[i]); } dfs(1, n); for(int i=n-1; i>1; --i) ans[i] = max(ans[i], ans[i+1]); for(int i=1; i<=n; ++i) printf("%lld\n",ans[i]); } return 0;}
阅读全文
0 0
- HDU5696:区间的价值(搜索 & 分治 & 思维)
- HDU5696 区间的价值(分治/单调队列)
- 分治法 区间的价值 hdu5696
- 区间顺序枚举 hdu5696 区间的价值
- 百度之星初赛B hdu5696 区间的价值 分治思想
- hdu5696-分治-暴力剪枝-rmq-dfs-单调栈-区间的价值
- Hdu5696 区间的价值(花式水)
- HDU5696 2016百度之星初赛Astar Round2B 区间的价值
- HDU5696(分治)
- 51nod 1674 区间的价值 V2(分治)
- 【51nod 区间的价值 】+ 思维
- 51nod 1564 && 1674 区间的价值(V2) 数列分治
- 【hpu oj 1009 QAQ的区间价值 思维】
- hdu 区间的价值(RMQ+扫描)
- HDU-5696-区间的价值(DFS)
- QAQ的区间价值
- QAQ的区间价值
- 区间的价值 V2
- 多态
- Rebuilding Roads (树形dp)
- 单处理器进程调度算法的模拟
- scrapy pachong
- 关于linux中mysql中遇到的问题ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/mydata/m
- HDU5696:区间的价值(搜索 & 分治 & 思维)
- 变量的作用域,初始化
- 2017年,前端开发市场饱和了么
- hdu 2028 多个数的最小公倍数
- explain详解
- 匿名对象和内部类
- 测试用例设计及面试题分析
- Redis简单入门
- 杭电ACM OJ 1016 Prime Ring Problem 回溯法+ 高效判断素数 快速轻松解决