luogu P1901 发射站

题目描述

某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发射站接收。

显然,每个发射站发来的能量有可能被 0 或 1 或 2 个其他发射站所接受,特别是为了安 全,每个发射站接收到的能量总和是我们很关心的问题。由于数据很多,现只需要你帮忙计 算出接收最多能量的发射站接收的能量是多少。

输入格式

第 1 行:一个整数 N;

第 2 到 N+1 行:第 i+1 行有两个整数 Hi 和 Vi,表示第 i 个人发射站的高度和发射的能量值。

输出格式

输出仅一行,表示接收最多能量的发射站接收到的能量值,答案不超过 longint。

说明/提示

对于 40%的数据,1<=N<=5000;1<=Hi<=100000;1<=Vi<=10000;

对于 70%的数据,1<=N<=100000;1<=Hi<=2,000,000,000;1<=Vi<=10000;

对于 100%的数据,1<=N<=1000000;1<=Hi<=2,000,000,000;1<=Vi<=10000。

单调队列,或者说单调栈

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N=1e6+10;
int h[N],v[N],q[N],f[N];
signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)scanf("%lld%lld",&h[i],&v[i]);
    int l=1,r=1;
    q[1]=0;
    for(int i=1;i<=n;i++){
        while(l<=r&&h[q[r]]<h[i]){
            f[i]+=v[q[r]];
            r--;
        }
        f[q[r]]+=v[i];
        q[++r]=i;
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    ans=max(ans,f[i]);
    cout<<ans<<endl;
}

原文地址:https://www.cnblogs.com/naruto-mzx/p/11606994.html

时间: 2024-11-13 10:21:32

luogu P1901 发射站的相关文章

洛谷P1901 发射站

P1901 发射站 245通过 468提交 题目提供者该用户不存在 标签NOI导刊云端↑ 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 大神路过的看一下 输入后面为什么带空格. 有人说是单调队列,但不明明- 题目描述 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发射站接收. 显然,每个发射站发来的能量有可能被 0 或

Luogu【P1901】发射站(单调栈)

题目链接 题目说明比自己矮的塔收不到自己的能量,摆明了就是单调栈呗. 把比自己矮的全都从栈里弹出去,于是碰到第一个比自己高的.让他接受自己发射的能量. 当然由于发射站发射的能量有两个方向,所以正反两遍. 然后 放代码. #include<cstdio> #include<cstdlib> #include<cctype> using namespace std; long long ans; inline long long max(long long a,long l

发射站

题目描述 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发射站接收. 显然,每个发射站发来的能量有可能被 0 或 1 或 2 个其他发射站所接受,特别是为了安 全,每个发射站接收到的能量总和是我们很关心的问题.由于数据很多,现只需要你帮忙计 算出接收最多能量的发射站接收的能量是多少. 输入格式 第 1 行:一个整数 N; 第 2 到 N+1 行:第 i+1 行有

[LuoguP1901]发射站

一个本题不太寻常的解法.(需要正解的可以pass) 貌似题解区没有这么做的,但可能是我眼瞎. \(\text{Part-I:核心思想}\) 对于每一个发射塔,左右都可能有发射的对象,即向左数第一个\(H\)的值大于自己本身\(H\)的值的塔,或向右数第一个\(H\)的值大于自己本身\(H\)的值的塔. 我们逐个考虑.设现在为第\(i\)个发射塔,要确定左边的发射的对象. 首先,没有的情况,即\(i=1\text{ 或 }\max\limits_{1\le k<i}H_k\le H_i\) 时.

单调队列题目练习

RT.由于本人dp很弱(或者说什么都弱),于是决定分模块刷题.单调队列就找了些题目(我水平已经沦落到了普及组qwq)练,顺便把以前做过的题都堆起来.以后做到的题再开新文章. 1.多重背包 不说了,很好推.放许久之前的幼稚代码 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAXN=1000+7; 4 const int MAXV=10000+7; 5 inline int Read(){ 6 int x=0,f=0;c

单调队列————[USACO09MAR]向右看齐Look Up

先了解一下单调队列: 很明显的具有单调性 分为单调递增和单调递减两种,简单点讲就是维护队头为最大值或者为最小值 (建议采用双向队列  比较好写) 具体步骤:(这个是单调递减) 如果队列非空且当前值比队尾元素大,不断删除比该值小的元素,否则直接队尾入队 while(!que.empty()&&ma[i]>que.back()) {     que.pop_back(); } que.push_back(i); 单调队列的作用:: 1):可以用来维护区间的单调性,用来解决最大或最小的问题

【NOIP数据结构专项】单调队列单调栈

[洛谷P1901 ]发射站 http://www.luogu.org/problem/show?pid=1901 题目描述 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发射站接收. 显然,每个发射站发来的能量有可能被 0 或 1 或 2 个其他发射站所接受,特别是为了安 全,每个发射站接收到的能量总和是我们很关心的问题.由于数据很多,现只需要你帮忙计 算出接收

空間定位能力的提升

VR技术:欺骗大脑的技术. 空间定位系统,若能精确侦测到头盔的位置和移动方向,并迅速传送到电脑,对于VR低延迟有很大帮助,能有效降低眩晕感(更佳的视觉欺骗). 此外,如果也能允许在一个空间内的站姿.坐姿.蹲跳等VR体验(更佳的身体动觉欺骗),眩晕感更低了(沉浸感提高了). 在身体动觉方面,以前,使用者不能完全自由地行走. 现在的HTC Vive让人们可在10*10英尺的空间里行动. 这提升了人们身临其境的体验,例如能够在3D空间内绘图,也能从不同角度观察所绘的创作.这也赢得了迪士尼首席动画师Gl

高清电视标准机顶盒

模擬信號接收電視盒 http://www.taobao.com/product/%E6%A8%A1%E6%93%AC%E4%BF%A1%E8%99%9F%E6%8E%A5%E6%94%B6%E9%9B%BB%E8%A6%96%E7%9B%92.html  香港高清电视标准机顶盒  香港模拟广播    http://zh.wikipedia.org/wiki/%E5%BD%A9%E8%89%B2%E9%9B%BB%E8%A6%96%E5%BB%A3%E6%92%AD%E6%A8%99%E6%BA%