P2659 美丽的序列

单调栈维护区间最小值,单调递增栈维护区间最小值,

考虑当前数对答案的贡献,不断加入数,如果加入的数$>$栈顶,说明栈顶的元素对当前数所在区间是有贡献的,同时加入当前的数。

反之,若当前加入的数比栈顶元素小,那么栈顶元素(所谓的最小值)已经失去了价值,因为他不会再对后面的区间造成影响,所以弹出栈顶,同时更新$ans$

#include<iostream>
#include<cstdio>
#include<algorithm> #define N 10000000
#define inf 0x7fffffff
#define LL long long
using namespace std; LL ans,top;
struct node{
int val,pos;
}S[N];
int n; int main()
{
scanf("%d",&n);
for(int x,i=;i<=n;i++){
scanf("%d",&x);
if(!top) S[++top].val=x,S[top].pos=i;
else{
while(S[top].val>x) {ans=max(ans,1ll*(i-S[top-].pos-)*S[top].val);--top;}
S[++top].pos=i,S[top].val=x;
}
}
for(int i=;i<=top;i++)
ans=max(ans,1ll*(n-S[i-].pos)*S[i].val);
printf("%lld",ans); return ;
}

线段树查询区间最小值,找到区间最小值的位置,不断递归寻找最小值。

一段区间的价值即为$(r-l+1)*minn$

这种做法竟然没有$TLE$,神奇,难道就是因为他不断递归找了最小值的位置吗?

#include<iostream>
#include<cstdio>
#include<algorithm> #define N 10000000
#define inf 0x7fffffff
using namespace std; struct nodE{
int l,r,w_max,pos;
}tr[N]; int n;
long long ans; void push_up(int k){
if(tr[k<<].w_max<tr[k<<|].w_max) tr[k].pos=tr[k<<].pos;
else tr[k].pos=tr[k<<|].pos;
tr[k].w_max=min(tr[k<<].w_max,tr[k<<|].w_max);
} void build(int k,int l,int r){
tr[k].l=l,tr[k].r=r;
if(l==r) {scanf("%d",&tr[k].w_max);tr[k].pos=l;return;}
int mid=(l+r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
push_up(k);
} nodE query(int k,int ql,int qr){
int l=tr[k].l,r=tr[k].r,mid=(l+r)>>;
if(l>=ql&&r<=qr) return tr[k];
nodE x,y;x.w_max=y.w_max=inf;
if(ql<=mid) x=query(k<<,ql,qr);
if(qr>mid) y=query(k<<|,ql,qr);
return x.w_max>y.w_max ? y :x;
} void slove(int l,int r){
nodE px=query(,l,r);
ans=max(ans,1ll*(r-l+)*px.w_max);
if(l<px.pos) slove(l,px.pos-);
if(r>px.pos) slove(px.pos+,r);
} int main()
{
scanf("%d",&n);
build(,,n);
slove(,n);
printf("%lld",ans); return ;
}

洛谷——P2659 美丽的序列的更多相关文章

  1. 洛谷 P2659 美丽的序列 解题报告

    P2659 美丽的序列 题目背景 GD是一个热衷于寻求美好事物的人,一天他拿到了一个美丽的序列. 题目描述 为了研究这个序列的美丽程度,GD定义了一个序列的"美丽度"和" ...

  2. 洛谷P2659 美丽的序列 单调栈模板

    P2659 美丽的序列 题目链接 https://www.luogu.org/problemnew/show/P2659 题目描述 为了研究这个序列的美丽程度,GD定义了一个序列的"美丽度& ...

  3. 洛谷P2659 美丽的序列

    题目 该题目可以用辅助数组l[i], r[i]来指向以data[i]为最小值的左端点和右端点.然后最后枚举每个data[i]寻找每个data[i]的美丽值的最大值. 然后辅助数组可以用单调栈求出. # ...

  4. 笛卡尔树-P2659 美丽的序列

    P2659 美丽的序列 tag 笛卡尔树 题意 找出一个序列的所有子段中子段长度乘段内元素最小值的最大值. 思路 我们需要找出所有子段中贡献最大的,并且一个子段的贡献为其长度乘区间最小值. 这--不就 ...

  5. P2659 美丽的序列

    P2659 美丽的序列对于当前的最小值,找到最大的左右边界,然后更新答案.用单调队列确定左右边界,O(n)做法. #include<iostream> #include<cstdio ...

  6. 洛谷 2023 [AHOI2009]维护序列

    洛谷 2023 [AHOI2009]维护序列 洛谷原题传送门 这个题也是一道经典的线段树模版(其实洛谷的模版二改一下输入顺序就能AC),其中包括区间乘法修改.区间加法修改.区间查询三个操作. 线段树的 ...

  7. 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)

    洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...

  8. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  9. [洛谷P2023] [AHOI2009]维护序列

    洛谷题目链接:[AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列 ...

随机推荐

  1. 2014年国内最热门的.NET开源项目TOP25

    编者按:在2014年初时,微软宣布成立.NET基金会,全面支持开源项目.如今将过一年的时间,目前国内的开源项目到底如何了?下面我们就来细数一下国内25款比较优秀的.NET开源项目. 作者:acdoma ...

  2. python datatime日期和时间值模块

    datetime.time():是一个时间类,这个类接受4个参数,分别代表时,分,秒,毫秒.参数的默认值是为0 #!/usr/bin/env python #coding:utf8 import da ...

  3. git服务器的建立

    git简介 首先,与以前广为流行的SVN不同,git是分布式的,其没有服务器端与客户端之分(虽然在项目管理过程中,一般会人为地指定某一台非开发用的机器作为“服务器”,但就git自身功能来说,完全可以没 ...

  4. request.getRemoteAddr()和request.getRemoteHost()

    转自:https://www.cnblogs.com/aizj/p/7593209.html request.getRemoteAddr()是获得客户端的ip地址.request.getRemoteH ...

  5. bzoj 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生【dp】

    参考:http://hzwer.com/3917.html 好神啊 注意到如果分成n段,那么答案为n,所以每一段最大值为\( \sqrt{n} \) 先把相邻并且值相等的弃掉 设f[i]为到i的最小答 ...

  6. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居【切比雪夫距离+并查集+multiset】

    参考:http://hzwer.com/4361.html 坐标开long long,inf开大点 先曼哈顿转切比雪夫(x+y,x-y),距离就变成了max(x',y'): 先按x排序,维护两个指针, ...

  7. P1266 速度限制(分层图spfa)

    P1266 速度限制 题目描述 在这个繁忙的社会中,我们往往不再去选择最短的道路,而是选择最快的路线.开车时每条道路的限速成为最关键的问题.不幸的是,有一些限速的标志丢失了,因此你无法得知应该开多快. ...

  8. 树网的核 2007年NOIP全国联赛提高组(floyed)

    树网的核 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description [问题描述]设 T= ...

  9. 洛谷 P2090 数字对

    发现如果给定两个数(a,b),可以用类似辗转相除法在logn的时间内计算出(反向)变到(1,1)的最小步数. 然而并不知道另一个数是多少? 暴力嘛,枚举一下另一个数,反正1000000的nlogn不虚 ...

  10. KMP POJ 1961 Period

    题目传送门 /* 题意:求一个串重复出现(>1)的位置 KMP:这简直和POJ_2406没啥区别 */ /******************************************** ...