原题

我们定义“区间的价值”为一段区间的最大值*最小值。
一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1)。
求长度分别为1~n的区间的最大价值。
保证数据随机


因为保证数据随机,所以我们可以考虑用区间的最大值把这个区间分为两个部分,这样答案的贡献就有两种情况。
1、在同一个区间里
2、跨过最大值,在两个区间里

情况1通过递归就变成了情况2,而情况二我们通过two-points来完成。记录l指针和r指针,因为所求为最大值,所以选取l和r指针较大的内个加入,并每次更新答案即可。
因为数据随机,所以O(nlogn)

#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100010
typedef long long ll;
using namespace std;
ll n,ans[N],a[N];ll read()
{ll ans=0,fu=1;char j=getchar();for (;(j<'0' || j>'9') && j!='-';j=getchar()) ;if (j=='-') j=getchar(),fu=-1;for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';return ans*fu;
}void solve(int l,int r)
{if (l>r) return ;ll mx=0,pos,mn;for (int i=l;i<=r;i++)if (a[i]>mx) mx=a[i],pos=i;int ll=pos-1,rr=pos+1;mn=mx;ans[1]=max(ans[1],mx*mx);while (ll>=l && rr<=r){if (a[ll]<a[rr]) mn=min(a[rr],mn),rr++;else mn=min(a[ll],mn),ll--;ans[rr-ll-1]=max(ans[rr-ll-1],mx*mn);}while (ll>=l) mn=min(a[ll],mn),ll--,ans[rr-ll-1]=max(ans[rr-ll-1],mx*mn);while (rr<=r) mn=min(a[rr],mn),rr++,ans[rr-ll-1]=max(ans[rr-ll-1],mx*mn);solve(l,pos-1);solve(pos+1,r);
}int main()
{while (~scanf("%lld",&n)){memset(ans,0,sizeof(ans));for (int i=1;i<=n;i++)a[i]=read();solve(1,n);for (int i=1;i<=n;i++)printf("%lld\n",ans[i]);}return 0;
}

转载于:https://www.cnblogs.com/mrha/p/8031212.html

[hdu] 5696 区间的价值 || 序列分治相关推荐

  1. HDU 5696 区间的价值 暴力

    区间的价值 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5696 Description 我们定义"区间的价值"为一段区间的最大 ...

  2. 2016百度之星 初赛(Astar Round2B) 1001 区间的价值

    题意:我们定义"区间的价值"为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1). 现在聪明的杰西想要知道,对于长度为k的区间,最大价值的 ...

  3. [HDU 6643] Ridiculous Netizens(点分治+根号分治+dp)

    HDU 6643 Ridiculous Netizens problem hdu6643 题目大意:给定一棵无根树,以及每个点的点权 wiw_iwi​. 定义一个连通块的价值为连通块内点的点权之积. ...

  4. HDU 6135 Casual Podracing(CDQ分治)

    Description 一个周长为 L L的圆弧上面有nn个不重合的点,第 i i个点距圆弧起点距离(圆上距离)为did_i,速度为 vi v_i(取逆时针为正方向,任意两点速度不同),能量为 wi ...

  5. The 2014 ACM-ICPC BeiJing D - Dire Wolf HDU - 5115 区间dp

    题意 n个狼 排成一排 我们要把一排狼都删除掉 删除一个狼的花费是这个狼的权值和左右两个狼的附加值 求最小花费 分析 考虑区间dp dp[i][j]表示i到j的最小花费 我们可以枚举其中的k 为序列中 ...

  6. bzoj 3745 [Coci2015]Norma——序列分治

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3745 如果分治,就能在本层仅算过 mid 的区间了. 可以从中间到左边地遍历左边,给右边两个 ...

  7. hdu 4745 区间dp

    题意:求一个环的最长回文序列,是序列不是串 链接:点我 起点是可以任意的, 所以只要求出每个区间的最长回文序列之后取max(dp[1][i]+dp[i+1][n]),即可得最终答案 本来是想扩展两倍的 ...

  8. 【数学结论】51Nod 1674 区间的价值 V2

    题面在这里 很容易发现,一个序列的前缀and/or值可分为 log(V) log(V)块 其中V是序列中元素的最大值 然后这题就很好做了 枚举区间的右端点i,同时维护每一个块的范围和值 显然有and块 ...

  9. Palindrome subsequence HDU - 4632 区间dp|记忆化搜索

    // 区间dp import java.util.Scanner;/**** @author CN*/ public class main {static int mod = 10007;static ...

最新文章

  1. OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform)
  2. 设计需要冲击力:「不怕没品味的人,就怕没品味的人用心」
  3. android:layout_weight属性的简单使用
  4. leetcode 150. 逆波兰表达式求值(栈)
  5. 一个资深老司机告诉你选车的秘密 (完全版)
  6. 记一起因证书引发的支付宝支付异步通知接收不到的事故
  7. python列表用法大全
  8. Go语言中使用SQLite数据库
  9. Android App层通过JNI从驱动获取Input Event
  10. JavaScript算法 之 选择排序
  11. Phoenix 映射 HBase + Maven
  12. 二叉搜索树的后序遍历序列(C++)
  13. 国产计算机设备,国产计算机报价
  14. 故障转移群集 SQLSERVER解决方案
  15. 计算机学科 集体备课记录,信息技术学科组集体备课活动记录
  16. 水经注万能地图下载器、影像插件和转换器的功能与关系
  17. 链家网深圳租房信息分析报告
  18. 来看看 random_state 这个参数
  19. Ural 2037. Richness of binary words 打表找规律 构造
  20. 嫂嫂学计算机,开心一刻,,老妈催婚, 含泪让男闺蜜冒充, 进门后嫂子愣住了…

热门文章

  1. C#集合--Dictionary
  2. 【Node.js学习小案例】DNS域名解析 一
  3. poj1988(判断一个结点下面有多少个结点,推荐)
  4. python用WMI等获取及修改windows系统信息
  5. ASP.NET夜话笔记06
  6. 各种资源思科、gns3……
  7. 可怕又可笑的看病经历
  8. FTP压缩文件上传到HDFS大小不一致的问题说明(FTP传输模式)
  9. hive指定多个字符作为列分隔符的问题说明
  10. centos安装xrdp实现远程桌面访问