luogu 1901 发射站

Posted jack_yyc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu 1901 发射站相关的知识,希望对你有一定的参考价值。

题目大意:

一个数列,它左边第一个比它高的人和右边第一个比它高的人要加上它的权值

思路:

单调栈维护一个单调递减的栈

正反各维护一遍

技术分享
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<set>
 8 #include<map>
 9 #include<vector>
10 #include<stack>
11 #include<queue>
12 #define ll long long
13 #define inf 2147383611
14 #define MAXN 1001001
15 using namespace std;
16 inline ll read()
17 {
18     ll x=0,f=1;
19     char ch;ch=getchar();
20     while(!isdigit(ch)) {if(ch==-) f=-1;ch=getchar();}
21     while(isdigit(ch)) {x=x*10+ch-0;ch=getchar();}
22     return x*f;
23 }
24 int n,a[MAXN],v[MAXN],st[MAXN],top,ans[MAXN],maxn;
25 int main()
26 {
27     n=read();
28     for(int i=1;i<=n;i++) a[i]=read(),v[i]=read();
29     for(int i=1;i<=n;i++)
30     {
31         while(top&&a[st[top]]<=a[i]) top--;
32         ans[st[top]]+=v[i];
33         st[++top]=i;
34     }
35     top=0;
36     for(int i=n;i>=1;i--)
37     {
38         while(top&&a[st[top]]<=a[i]) top--;
39         ans[st[top]]+=v[i];
40         st[++top]=i;
41     }
42     for(int i=1;i<=n;i++) maxn=max(maxn,ans[i]);
43     printf("%d",maxn);
44 }
View Code

以上是关于luogu 1901 发射站的主要内容,如果未能解决你的问题,请参考以下文章

洛谷P1901 发射站

[LuoguP1901]发射站

P1901-发射站

luogu2038noip2014无线网络发射器选址 [模拟][二维前缀和]

保留活动中的片段状态

一些恶心的代码片段