寒假刷題24 發射站(洛谷P1901)單調棧

2021-10-03 00:23:23 字數 675 閱讀 7430

發射站

題目解析:

有一句很重要的話:發出的能量只被兩邊最近的且比 它高的發射站接收。顯然要用單調棧。

也就是要分別求每個數左邊和右邊碰到的第乙個比它大的數的位置。

這次用了c++自帶的stack,注意在判斷語句裡s.size()一定要寫在最前面(血的教訓qaq)

ac**:

#include#include#include#includeusing namespace std;

#define ll long long

const int maxn=1000000+10;

ll arr[maxn],s[maxn],sum[maxn],n,ans = -1;

stack stck;

int main()

stck.push(i);

}while(stck.size()) stck.pop();

for(int i = n; i >= 0; i--)

stck.push(i);

}for(int i = 1; i <= n; i++) ans = max(ans,sum[i]);

printf("%lld",ans);

return 0;

}

洛谷 P1901 發射站

某地有 n 個能量發射站排成一行,每個發射站 i 都有不相同的高度 hi,並能向兩邊 當 然兩端的只能向一邊 同時發射能量值為 vi 的能量,並且發出的能量只被兩邊最近的且比 它高的發射站接收。顯然,每個發射站發來的能量有可能被 0 或 1 或 2 個其他發射站所接受,特別是為了安 全,每個發射站接...

洛谷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 個其他發射站所接受,特別是為了安 全,每個發射站接...