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). 现在聪明的杰西想要知 ...
随机推荐
- MySQL (三)-- 字段属性、索引、关系、范式、逆规范化
1 字段属性 主键.唯一键和自增长. 1.1 主键 主键:primary key,一张表中只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复. 一张表只能有最多一个主键. 1.1 ...
- 集美大学网络1413第十五次作业成绩(团队十) -- 项目复审与事后分析(Beta版本)
题目 团队作业10--项目复审与事后分析(Beta版本) 团队作业10成绩 --团队作业10-1 Beta事后诸葛亮 团队/分值 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色 ...
- 结对作业-基于GUI的四则运算
一.需求分析 1.题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web ...
- 【Alpha】——Second Scrum Meeting
一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 完成登录按钮代码 完成添加功能 郑靖涛 完成登录按钮代码 完成删除功能 杨海亮 完成注册按钮代码 完成查找 ...
- 201521123029《Java程序设计》第1周学习总结
1. 本周学习总结 1.认识了Java的发展: 2.Java语言的特点,简单性和结构中立: 3.了解到了JDK.JRE,JVM: 4.学习Java数据类型分类,如整形,char型等. 2. 书面作业 ...
- 201521123030 《Java程序设计》 第10周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 在fi ...
- smtp模块使用
import smtplib from email.mime.text import MIMEText from bs4 import BeautifulSoup from urllib.reques ...
- 定位页面元素之xpath详解以及定位不到测试元素的常见问题
一.定位元素的方法 id:首选的识别属性,W3C标准推荐为页面每一个元素设置一个独一无二的ID属性, 如果没有且很难找到唯一属性,解决方法:(1)找开发把id或者name加上.如果不行,解决思路可以是 ...
- java程序员该工作还是游戏?
前阵子我终于下定决心,删掉了硬盘里所有的游戏. 身为一个程序猿,每天都要和各种新技术打交道,闲暇时间,总还得看一下各大论坛,逛逛博客园啥的,给自己充充电.游戏的话,其实我自小就比较喜欢,可以算是一种兴 ...
- 小知识点-ios跳过app store更新版本
版本更新实现的思路 获取自身的版本号 获取AppStore的版本号 自身的版本号和AppStore的比较 弹窗提示所需数据的获取的方式 1.获取自身的版本号 2.AppStore的版本号 Wechat ...