zoukankan      html  css  js  c++  java
  • 入门OJ 3792: [noip模拟题]发射站 (单调栈)

    题目

    Description

    N个能量发射站排成一行,每个发射站i都有不相同的高度 Hi,并能向两边(当然两端的只能向一边)同时发射能量值为Vi的能量,并且发出的能量只被两边最近的且比它高的发射站接收。显然每个发射站发来的能量有可能被012个其它发射站接收,特别是为了安全,它受到的能量总和是我们很关心的。由于数据很多,请你帮助我们计算出接受了最多能量的发射站接受的能量是多少。

    Input

    1行:一个整数 N

    2..N+1行:第i+1行有2个整数HiVi,表示第i个发射站的高和发射的能量值。

    1≤N≤800,0001≤hi≤2,000,000,0001≤vi≤10,000

    Output

    一行:一个发射站接收到的最大能量值

    题解

    单调栈不多说

    代码 Code

    #include <bits/stdc++.h>
    using namespace std;
    stack<int> mono_stack;
    int n, H[800005], V[800005], Sum[800005], ans;
    int main(int argc, char **argv) {
      scanf("%d", &n);
      for (register int i(1); i <= n; ++i) {
        scanf("%d %d", &H[i], &V[i]);
        while (!mono_stack.empty() && H[mono_stack.top()] < H[i]) 
          Sum[i] += V[mono_stack.top()], mono_stack.pop();
        if (!mono_stack.empty()) Sum[mono_stack.top()] += V[i];
        mono_stack.push(i);
      }
      for (register int i(1); i <= n; ++i) ans = max(ans, Sum[i]);
      printf("%d
    ", ans);
      return 0;
    }
    

    其他

    入门OJ 2009太坑了,又不给数据,其他网站又找不到

    辣鸡大视野

  • 相关阅读:
    Codeforces Round #534 (Div. 2) D. Game with modulo 交互题
    传球游戏 dp
    欧拉通路和欧拉回路
    HDU 1116
    HDU 4970
    HDU 4557
    HDU 4864
    HDU 1565
    HDU 3046
    HDU 4240
  • 原文地址:https://www.cnblogs.com/forth/p/9519742.html
Copyright © 2011-2022 走看看