某地有 n 個能量發射站排成一行,每個發射站 i 都有不相同的高度 hi,並能向兩邊(當 然兩端的只能向一邊)同時發射能量值為 vi 的能量,並且發出的能量只被兩邊最近的且比 它高的發射站接收。
顯然,每個發射站發來的能量有可能被 0 或 1 或 2 個其他發射站所接受,特別是為了安 全,每個發射站接收到的能量總和是我們很關心的問題。由於資料很多,現只需要你幫忙計 算出接收最多能量的發射站接收的能量是多少。
輸入格式:
第 1 行:乙個整數 n;
第 2 到 n+1 行:第 i+1 行有兩個整數 hi 和 vi,表示第 i 個人發射站的高度和發射的能量值。
輸出格式:
輸出僅一行,表示接收最多能量的發射站接收到的能量值,答案不超過 longint。
輸入樣例#1:
34 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。
兩邊各掃一遍,用單調棧維護一下。
#include#include#include#includeusing namespace std;
const int n=1000005;
int n,v[n],h[n],w[n];
stackstk;
void add(int x)
洛谷P1901 發射站
這道題跟 noip2012 開車旅行的預處理完全一樣。通過鍊錶來實現。1 include 2 3using namespace std 45 define re register 6 define rep i,a,b for re int i a i b i 7 define repd i,a,b ...
洛谷P1901 發射站(單調棧)
某地有 n 個能量發射站排成一行,每個發射站 i 都有不相同的高度 hi,並能向兩邊 當 然兩端的只能向一邊 同時發射能量值為 vi 的能量,並且發出的能量只被兩邊最近的且比 它高的發射站接收。顯然,每個發射站發來的能量有可能被 0 或 1 或 2 個其他發射站所接受,特別是為了安 全,每個發射站接...
單調棧 洛谷 P1901 發射站
某地有 n 個能量發射站排成一行,每個發射站 i 都有不相同的高度 hi,並能向兩邊 當 然兩端的只能向一邊 同時發射能量值為 vi 的能量,並且發出的能量只被兩邊最近的且比 它高的發射站接收。顯然,每個發射站發來的能量有可能被 0 或 1 或 2 個其他發射站所接受,特別是為了安 全,每個發射站接...