美丽的序列

题目背景 Background

GD是一个热衷于寻求美好事物的人,一天他拿到了一个美丽的序列。

题目描述 Description

为了研究这个序列的美丽程度,GD定义了一个序列的“美丽度”和“美丽系数”:对于这个序列的任意一个区间[l,r],这个区间的“美丽度”就是这个区间的长度与这个区间的最小值的乘积,而整个序列的“美丽系数”就是它的所有区间的“美丽度”的最大值。现在GD想要你帮忙计算这个序列的“美丽系数”。

输入输出格式 Input/output

输入格式:

第一行一个整数n,代表序列中的元素个数。
第二行n个整数a1、a2…an,描述这个序列。
输出格式:
一行一个整数,代表这个序列的“美丽系数”。

输入输出样例 Sample input/output

样例测试点#1

输入样例:

3
1 2 3

输出样例:
4

说明 description

样例解释
   选取区间[2,3],可以获得最大“美丽系数”为2*2=4。
数据范围
   对于20%的数据,n<=2000;
   对于60%的数据,n<=200000;
   对于100%的数据,1<=n<=2000000,0<=ai<=2000000。
提示
   你可能需要一个读入优化。

题解

  开两个单调队列,last[i]表示上一个比i小的值的位置,next[i]表示下一个比i小的值的位置,注意是小于,等于不算!!!

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<cstring>
 7 using namespace std;
 8 typedef long long LL;
 9 const LL inf=1e12;
10 inline LL read(){
11     LL x=0,f=1;char ch=getchar();
12     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
13     while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
14     return x*f;
15 }
16 LL N,a[2000001];
17 LL last[2000001],next[2000001];
18 LL q1[2000001],pos1[2000001],h1,t1;
19 LL q2[2000001],pos2[2000001],h2,t2;
20 inline void calc1();
21 inline void calc2();
22 LL maxx;
23 int main(){
24     N=read();
25     for(int i=1;i<=N;i++) a[i]=read();
26     calc1();
27     calc2();
28     for(int i=1;i<=N;i++){
29         LL tmp=(next[i]-last[i]-1)*a[i];
30         if(maxx<tmp) maxx=tmp;
31     }
32     cout<<maxx;
33     return 0;
34 }
35 inline void calc1(){
36     q1[1]=a[1];pos1[1]=1; h1=t1=1;
37     int now=2;
38     while(now<=N){
39         while(t1>=h1&&q1[t1]>=a[now]){
40             t1--;
41         }
42         t1++;
43         q1[t1]=a[now];
44         pos1[t1]=now;
45         last[now]=pos1[t1-1];
46         now++;
47     }
48 }
49 inline void calc2(){
50     q2[N]=a[N]; pos2[N]=N; h2=t2=N,next[N]=N+1;
51     int now=N-1;
52     while(now>=1){
53         while(t2<=h2&&q2[t2]>=a[now]){
54             t2++;
55         }
56         t2--;
57         q2[t2]=a[now];
58         pos2[t2]=now;
59         next[now]=pos2[t2+1];
60         if(next[now]==0) next[now]=N+1;
61         now--;
62     }
63 }
时间: 2024-10-06 22:56:33

美丽的序列的相关文章

【洛谷P2659】美丽的序列

题目背景 GD是一个热衷于寻求美好事物的人,一天他拿到了一个美丽的序列. 题目描述 为了研究这个序列的美丽程度,GD定义了一个序列的"美丽度"和"美丽系数":对于这个序列的任意一个区间[l,r],这个区间的"美丽度"就是这个区间的长度与这个区间的最小值的乘积,而整个序列的"美丽系数"就是它的所有区间的"美丽度"的最大值.现在GD想要你帮忙计算这个序列的"美丽系数". 输入输出格式 输入格

P2659 美丽的序列

P2659 美丽的序列对于当前的最小值,找到最大的左右边界,然后更新答案.用单调队列确定左右边界,O(n)做法. 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<algorithm> 5 #include<cmath> 6 #include<ctime> 7 #include<set> 8 #include<map> 9

[SOJ475]【SPC #2】美丽的序列 ~ Beautiful Sequence【莫队】【哈希】

题意简述:给一个长度为\(n\)的序列,每次给出\(x, y\),求有多少区间\([l, r]\)满足\(x\leq l\leq r\leq y\),且\([l, r]\)中每个元素都出现了偶数次.\(1\leq n, q \leq 10^5, 1\leq a_i\leq 10^6\). 设\(s_{i, j}\in[0, 1]\)表示前\(i\)个位置中,元素\(j\)出现的总次数\(\bmod 2\)的结果.显然\([l, r]\)中每个元素都出现了偶数次等价于\(\forall i\in

[luoguP2659] 美丽的序列(单调栈)

传送门 单调栈大水题 l[i] 表示 i 能扩展到的左边 r[i] 表示 i 能扩展到的右边 ——代码 1 #include <cstdio> 2 #include <iostream> 3 #define LL long long 4 5 const int MAXN = 2000002; 6 int n, t; 7 LL ans, a[MAXN], s[MAXN], l[MAXN], r[MAXN]; 8 9 inline int read() 10 { 11 int x =

!HDU 4346 插旗子RGR的插法有多少种-思维&amp;正难则逆&amp;思维!

题意:只有R和G两种旗子,美丽的插法是存在两个R的中点插G的情况,现在给你一个字符串代表现在有些地方已经插了,求美丽的插法有多少种 分析: 美丽=总 - 不美丽 所以我们来求不美丽有多少种. 这里就是思维的问题了:一个不美丽的序列必须满足的条件是任何两个相邻R的距离为奇数并且所有的相邻R的距离相等. 奇数这是显然的,如果两个相邻的R不为奇数,那么它们的中点存在,并且是G,这与不美丽矛盾: 距离相等也很好证:设三个相邻的R,R1R2的距离为x1,R2R3的距离为x2,则R1R3=x1+x2,因为x

[CF403D]Beautiful Pairs of Numbers

题意:给定$n,k$,对于整数对序列$\left(a_1,b_1\right),\cdots,\left(a_k,b_k\right)$,如果$1\leq a_1\leq b_1\lt a_2\leq b_2\lt\cdots\lt a_k\leq b_k\leq n$且所有的$b_i-a_i$互不相同,则称这个序列是“美丽的”,求美丽的序列的个数 先转化一下,把每个数对$\left(a_i,b_i\right)$看作一个区间$\left[a_i,b_i\right]$,则题目要求的是$k$个长

美丽联合业务升级下的机器学习应用

通常机器学习在电商领域有三大应用,推荐.搜索.广告,这次我们聊聊三个领域里都会涉及到的商品排序问题.从业务角度,一般是在一个召回的商品集合里,通过对商品排序,追求GMV或者点击量最大化.进一步讲,就是基于一个目标,如何让流量的利用效率最高.很自然的,如果我们可以准确预估每个商品的GMV转化率或者点击率,就可以最大化利用流量,从而收益最大. 蘑菇街是一个年轻女性垂直电商平台,主要从事服饰鞋包类目,2015年时全年GMV超过了百亿,后与美丽说合并后公司更名为美丽联合集团.2014年时入职蘑菇街,那时

bzoj 3744: Gty的妹子序列 主席树+分块

3744: Gty的妹子序列 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 101  Solved: 34[Submit][Status] Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成了一个序列,每个妹子有一个美丽度. Bakser神犇与他打算研究一下这个妹子序列,于是Bakse

【BZOJ3809】Gty的二逼妹子序列

3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1627  Solved: 481[Submit][Status][Discuss] Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们规定妹子们的美丽度全都在[1,n]中. 给定一个长度为n(1<=n<=100000)