The Preliminary Contest for ICPC China Nanchang National Invitational I.Max answer单调栈
//yxynb!
题意:一个5e5的数组,定义一个区间的值为 这个区间的和*这个区间的最小值,注意数组值有负数有正数,求所有区间中最大的值
题解:如果全是正数,那就是原题 POJ2796 单调栈做一下就ok
我们现在有负数,考虑这段区间,他的和必须是负数,由于导致和为负数,最小值一定也是负数,
那对于这样一个和为负的区间进行扩展的时候,遇见下一个数,是负数,我们一定会扩展,无论这个负数大小
遇见下一个是正数,如果和没有变正,那就可以继续扩展下去(不更新答案罢了)
所以我们对于那些和为负的区间,单独统计一下答案就好了,顺路就统计这个区间的最小值,因为一旦抛弃她就再也不会回头了!
所以压根不用线段树 ST表之类的,对于负数的和,整体按POJ2796做的取个min,就行了.复杂度O(n)
#include<bits/stdc++.h>
#define lld long long
#define N 500050
using namespace std;
int n;
lld a[N],sum[N],x[N],xx[N];
lld L[N],R[N],ansv,ans1;
int main ()
{
scanf("%d", &n);
for (int i=;i<=n;i++)
{
scanf("%lld",&x[i]);
xx[i]=x[i];
}
lld ww=xx[],minx=xx[];
for (int i=;i<=n;i++)
{
if (xx[i-]<)
{
minx=min(minx,xx[i]);
xx[i]+=xx[i-];
}else
{
xx[i]+=;
minx=1e18;
}
if (xx[i]<ww)
{
ww=xx[i];
ansv=minx;
}
}
if (ww<) ans1=ww*ansv;
for (int i=;i<=n;i++) a[i]=x[i];
for (int i=;i<=n;i++)
{
sum[i]=sum[i-]+a[i];
L[i]=R[i]=i;
}
a[]=a[n+]=-1e9;
for (int i=;i<=n;i++)
while(a[i]<=a[L[i]-]) L[i]=L[L[i]-];
for (int i=n;i>=;i--)
while(a[i]<=a[R[i]+]) R[i]=R[R[i]+];
lld ans=-1e18,l,r;
for (int i=;i<=n;i++)
{
lld T=a[i]*(sum[R[i]]-sum[L[i]-]);
if(ans<T) ans=T,l=L[i],r=R[i];
}
cout<<max(ans,ans1)<<endl;
}
The Preliminary Contest for ICPC China Nanchang National Invitational I.Max answer单调栈的更多相关文章
- The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer (单调栈+线段树)
题目链接:https://nanti.jisuanke.com/t/38228 题目大意:一个区间的值等于该区间的和乘以区间的最小值.给出一个含有n个数的序列(序列的值有正有负),找到该序列的区间最大 ...
- 计蒜客 38228. Max answer-线段树维护单调栈(The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer 南昌邀请赛网络赛) 2019ICPC南昌邀请赛网络赛
Max answer Alice has a magic array. She suggests that the value of a interval is equal to the sum of ...
- 2019The Preliminary Contest for ICPC China Nanchang National Invitational
The Preliminary Contest for ICPC China Nanchang National Invitational 题目一览表 考察知识点 I. Max answer 单调栈+ ...
- The Preliminary Contest for ICPC China Nanchang National Invitational
目录 Contest Info Solutions A. PERFECT NUMBER PROBLEM D. Match Stick Game G. tsy's number H. Coloring ...
- 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)
Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...
- The Preliminary Contest for ICPC China Nanchang National Invitational and International Silk-Road Programming Contest
打网络赛 比赛前的准备工作要做好 确保 c++/java/python的编译器能用 打好模板,放在桌面 A. PERFECT NUMBER PROBLEM #include <cstdio> ...
- The Preliminary Contest for ICPC China Nanchang National Invitational I题
Alice has a magic array. She suggests that the value of a interval is equal to the sum of the values ...
- Max answer(The Preliminary Contest for ICPC China Nanchang National Invitational)
Alice has a magic array. She suggests that the value of a interval is equal to the sum of the values ...
- 2019 The Preliminary Contest for ICPC China Nanchang National Invitational(A 、H 、I 、K 、M)
A. PERFECT NUMBER PROBLEM 题目链接:https://nanti.jisuanke.com/t/38220 题意: 输出前五个完美数 分析: 签到.直接百度完美数输出即可 #i ...
随机推荐
- 洛谷——P2252 取石子游戏
P2252 取石子游戏 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- [POJ1155]TELE(树形背包dp)
看到这道题的第一眼我把题目看成了TLE 哦那不是重点 这道题是树形背包dp的经典例题 题目描述(大概的): 给你一棵树,每条边有一个cost,每个叶节点有一个earn 要求在earn的和大于等于cos ...
- 微信小程序,获取点击元素的索引值index
1.需求说明 点击 “加号图片” 上传图片,需要知道点击的是第几个图片,动态的修改src数组,这里图片用的 wx:for 循环出来的 2.遇到问题 按照官方最新文档循环的方式,索引值是以 wx:fo ...
- buf.writeInt32BE()函数详解
buf.writeInt32BE(value, offset[, noAssert]) buf.writeInt32LE(value, offset[, noAssert]) value {Numbe ...
- 关于markdown(typora)的操作指南,以及导出为word格式文件插件(pandoc-2.6-windows-x86_64)的下载
Markdown简介 插件链接文章结尾处 目录 Markdown简介1. Markdown是什么?2. 谁创造了它?3. 为什么要使用它?4. 怎么使用?4.1 标题4.2 段落4.3 区块引用4.4 ...
- Sublime text如何设置快捷键让编写的HTML文件在浏览器预览?
STEP 1 Tools->Build System->New Build System STEP 2<img src="https://pic3.zhimg.com/ ...
- HDU 1561 树形DP背包问题
这是自己第一道背包上树形结构问题,不是很理解这个概念的可以先看看背包九讲 自己第一次做,看了一下别人的思路,结合着对简单背包问题的求解方式自己一次AC了还是有点小激动的 题目大意是: 攻克m个城市,每 ...
- 基于FPGA的简易数字时钟
基于FPGA的可显示数字时钟,设计思路为自底向上,包含三个子模块:时钟模块,进制转换模块.led显示模块.所用到的FPGA晶振频率为50Mhz,首先利用它得到1hz的时钟然后然后得到时钟模块.把时钟模 ...
- C++学习之继承中的访问控制
我们通常认为一个类有两种不同的用户:普通用户 和 类的实现者.其中,普通用户编写的代码使用类的对象,这部分代码只能访问类的公有(接口)成员:实现者则负责编写类的成员和友元的代码,成员和友元既能访问类的 ...
- php 把一个数组分成有n个元素的二维数组的算法
一.第一种解法 <?php //把一个数组分成几个数组 //$arr 是数组 //$num 是数组的个数 function partition($arr,$num){ //数组的个数 $list ...