zoukankan      html  css  js  c++  java
  • 洛谷P1901 发射站

    题目描述

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

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

    输入输出格式

    输入格式:

    第 1 行:一个整数 N;

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    3
    4 2 
    3 5 
    6 10
    
    输出样例#1:
    7

    说明

    对于 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。

    单调栈

    用单调栈维护一个单减序列,扫描到每个位置的时候,栈顶就是离它最近的比它高的发射站。

    ↑从左往右扫一遍,从右往左扫一遍,累加权值就得到最终答案了

     1 /*by SilverN*/
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 #include<vector>
     8 #define LL long long
     9 using namespace std;
    10 const int mxn=1000010;
    11 int read(){
    12     int x=0,f=1;char ch=getchar();
    13     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    14     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    15     return x*f;
    16 }
    17 int n;
    18 int h[mxn],w[mxn];
    19 int st[mxn],top=0;
    20 LL f[mxn];
    21 int main(){
    22     n=read();
    23     int i,j;
    24     for(i=1;i<=n;i++){
    25         h[i]=read();w[i]=read();
    26     }
    27     for(i=1;i<=n;i++){
    28         while(top && h[st[top]]<h[i])top--;
    29         f[st[top]]+=w[i];
    30         st[++top]=i;
    31     }
    32     top=0;
    33     for(i=n;i;i--){
    34         while(top && h[st[top]]<h[i])top--;
    35         f[st[top]]+=w[i];
    36         st[++top]=i;
    37     }
    38     LL ans=0;
    39     for(i=1;i<=n;i++)ans=max(ans,f[i]);
    40     printf("%lld
    ",ans);
    41     return 0;
    42 }
  • 相关阅读:
    多线程
    多线程
    多线程
    多线程
    Java 基础
    异常
    多线程
    多线程
    多线程
    幂等性
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/6067311.html
Copyright © 2011-2022 走看看