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

     

    https://www.luogu.org/problem/show?pid=1901

    题目描述

    某地有 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。

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

    然后每次插入值的时候,如果比栈顶元素小,说明栈顶元素就是它左边的离他最近的比他大的

    如果比栈顶大,就说明它是栈顶的右边的离他最近的比他大的,然后一直pop到比要插入的值大的,就是它左边的离他最近的比他大的

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 1000000
    int n,h[maxn],v[maxn],g[maxn],s[maxn];
    stack<int>sta;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&h[i],&v[i]);
            if(i==1) sta.push(i);
            else
            {
                if(h[i]<h[sta.top()]) g[sta.top()]+=v[i],sta.push(i);
                else{
                    while(h[sta.top()]<h[i])
                    {
                        g[i]+=v[sta.top()];
                        sta.pop();
                        if(sta.empty()) break;
                    }
                    if(!sta.empty()) g[sta.top()]+=v[i];
                    sta.push(i);
                }
            }
        }
        int maxx=-1;
        for(int i=1;i<=n;i++) maxx=max(maxx,g[i]);
        cout<<maxx;
        return 0;
    }
  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/chen74123/p/7392013.html
Copyright © 2011-2022 走看看