hdu5696 区间的价值
区间的价值
我们定义“区间的价值”为一段区间的最大值*最小值。
一个区间左端点在L,右端点在R,那么该区间的长度为(R-L+1)。
现在聪明的杰西想要知道,对于长度为k的区间,最大价值的区间价值是多少。
当然,由于这个问题过于简单。
我们肯定得加强一下。
我们想要知道的是,对于长度为1~n的区间,最大价值的区间价值分别是多少。
长度为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 先用线段树维护出区间最小值和最大值;
用快排的分治思想;
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std; long long n,m,r,ans[],tree_max[],tree_min[];
long long a[]; void build(int l,int r,int v){
if(l==r){
tree_max[v]=l;
return;
}
int mid=(l+r)>>;
build(l,mid,v<<);
build(mid+,r,(v<<)+);
if(a[tree_max[v<<]]>a[tree_max[(v<<)+]])
tree_max[v]=tree_max[v<<];
else
tree_max[v]=tree_max[(v<<)+];
} void build1(int l,int r,int v){
if(l==r){
tree_min[v]=l;
return;
}
int mid=(l+r)>>;
build1(l,mid,v<<);
build1(mid+,r,(v<<)+);
if(a[tree_min[v<<]]<a[tree_min[(v<<)+]])
tree_min[v]=tree_min[v<<];
else
tree_min[v]=tree_min[(v<<)+];
} long long query(int l,int r,int x,int y,int v){
if(l==x&&r==y){
return tree_max[v];
}
int mid=(l+r)>>;
if(y<=mid) return query(l,mid,x,y,v<<);
if(x>mid) return query(mid+,r,x,y,(v<<)+);
long long aa=query(l,mid,x,mid,v<<);
long long bb=query(mid+,r,mid+,y,(v<<)+);
if(a[aa]>a[bb])
return aa;
else
return bb;
} long long query1(int l,int r,int x,int y,int v){
if(l==x&&r==y){
return tree_min[v];
}
int mid=(l+r)>>;
if(y<=mid) return query1(l,mid,x,y,v<<);
if(x>mid) return query1(mid+,r,x,y,(v<<)+);
long long aa=query1(l,mid,x,mid,v<<);
long long bb=query1(mid+,r,mid+,y,(v<<)+);
if(a[aa]<a[bb])
return aa;
else
return bb;
} void dfs(int l,int r){
if(r<l) return;
long long aa=query(,n,l,r,);
long long bb=query1(,n,l,r,);
if(aa>bb) swap(aa,bb);
long long k=a[aa]*a[bb];
for(int i=(bb-aa)+;i<=r-l+;i++)
ans[i]=max(ans[i],k);
if(a[bb]>a[aa])
dfs(aa+,r),dfs(l,aa-);
else
dfs(bb+,r),dfs(l,bb-);
} int main(){
scanf("%lld",&n);
for(int i=;i<=n;i++){
scanf("%lld",&a[i]);
}
build(,n,);
build1(,n,);
dfs(,n);
for(int i=;i<=n;i++)
printf("%lld\n",ans[i]);
}
hdu5696 区间的价值的更多相关文章
- hdu5696区间的价值 -- 2016"百度之星" - 初赛(Astar Round2B)
Problem Description 我们定义“区间的价值”为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1). 现在聪明的杰西想要知道,对于长度为k的区 ...
- ACM学习历程—HDU5696 区间的价值(分治 && RMQ && 线段树 && 动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=5696 这是这次百度之星初赛2B的第一题,但是由于正好打省赛,于是便错过了.加上2A的时候差了一题,当时有思路,但 ...
- HDU5696:区间的价值——题解
http://acm.hdu.edu.cn/showproblem.php?pid=5696 题面是中文的我就不粘贴过来了…… ———————————————————————— 这题垃圾题!!神tm卡 ...
- 51nod 1564 区间的价值 | 分治 尺取法
51nod 1564 区间的价值 题面 一个区间的价值是区间最大值×区间最小值.给出一个序列\(a\), 求出其中所有长度为k的子区间的最大价值.对于\(k = 1, 2, ..., n\)输出答案. ...
- 【51nod】1564 区间的价值
题解 这个要注意到一个长度大的区间的最大价值一定比长度小的区间的价值要大 然后我们以每个点为最小值,显然区间越长最大值越大,然后我们更新最大区间长度的取值,这个可以用单调栈求这个最小值能更新到的左右端 ...
- 51nod 1674 区间的价值V2(思维+拆位+尺取法)
最近被四区题暴虐... 题意:lyk拥有一个区间. 它规定一个区间的价值为这个区间中所有数and起来的值与这个区间所有数or起来的值的乘积. 例如3个数2,3,6.它们and起来的值为2,or起来的值 ...
- hdu 5696 区间的价值 单调栈+rmq
区间的价值 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- HDU 5696 ——区间的价值——————【线段树、快排思想】
区间的价值 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- HDU 5696 区间的价值 暴力DFS
Problem Description 我们定义"区间的价值"为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1). 现在聪明的杰西想要知 ...
随机推荐
- 201521123107 《Java程序设计》第4周学习总结
第4周作业-面向对象设计与继承 1.本周学习总结 2.书面作业 1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 对类的注释: 所得到的效果: ...
- 201521123004《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 答:主要以泛型为主 //简单的泛型类的定义,T为类型参数 public ...
- 201521123049 《JAVA程序设计》 第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- Linux SDK之uClinux、Broadcom、Atheros、Realtek、Ralink、Marvell、Intel
接触的Linux SDK越来越多,整理整理,分享分享,不求系统全面,对您有帮助便足矣 文中大部分是与AP/Router SoC解决方案(单芯片WIFI 路由器解决方案)相关的Linux SDK SDK ...
- Shiro第二篇【介绍Shiro、认证流程、自定义realm、自定义realm支持md5】
什么是Shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和sp ...
- springmvc05-Spring+Springmvc+Hibernate实现简单的用户管理系统
1, 导入\spring-framework-3.2.4.RELEASE\libs\disk下所有包; hibernate-distribution-3.6.7.Final\lib\required下 ...
- JavaEE学习路线
针对很多初识Java者,对如何学习Java.如何学好Java很迷茫,最近刚把JavaEE的东西学完,把我的学习的经验分享给大家,一条适合大多数人的学习路线. 第一部分:Java语言入门阶段 第二部分: ...
- WEB项目的部署结构
tomcat/webapps目录是用来存放Java项目的.每一个文件夹都是一个项目,默认这个目录下已经有了四个项目,都是tomcat自带的. 其中ROOT就是我们测试Tomcat时访问的Tomcat的 ...
- 一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数
js-trigger是一个JavaScript触发器插件,可通过指定频次.指定时间内触发指定的处理函数 Tango<tanwei_yx@126.com> 特性 支持AMD/CMD/Comm ...
- String类的一些常见的获取方法(5)
String s = "aasfasfdtgsrast"; 1: int a = s.length() //返回字符串的长度 2: char s1 = charAt(int in ...