倒水 water (單調棧)

2021-10-06 16:46:53 字數 852 閱讀 3225

題目描述

有一天,你拿來了乙個長方形的容器,然後開始往裡面倒水。

這個長方形的容器由n個單元組成,每乙個單元都有乙個高度。

現在你想知道,要想讓水沒過第i個位置,他至少需要倒進去多少單位的水。

輸入

第一行乙個整數n。

接下來一行n個整數,第i個整數hi表示第i個位置的高度。

輸出

為了減少輸出量,假設要想讓水沒過第i個位置,需要倒進去ai單位的水,那麼你需要輸出,其中表示二進位制異或。

樣例輸入

【樣例1】

53 5 1 2 0

【樣例2】

53 2 3 2 3

樣例輸出

【樣例1】

13【樣例2】

2提示

樣例1解釋:五個位置的需水量分別為0,14,0,3,0,其中第2個位置的答案和第3個位置的答案如下:

對於20%的資料,保證1≤n≤1000

對於30%的資料,保證資料隨機生成,且hi≤100000

對於60%的資料,保證1≤n≤500000

對於100%的資料,保證1≤n≤2000000,0≤hi≤2147483647

思路

先計算字首和,通過單調棧得每個點左右比其高的最近點的位置,最後計算即可

**實現

單調棧解木板倒水問題(單調棧的簡單應用)

題目描述 地上從左到右豎立著 n 塊木板,從 1 到 n 依次編號,如下圖所示。我們知道每塊木板的高度,在第 n 塊木板右側豎立著一塊高度無限大的木板,現對每塊木板依次做如下的操作 對於第 i 塊木板,我們從其右側開始倒水,直到水的高度等於第 i 塊木板的高度,倒入的水會淹沒 ai 塊木板 如果木板...

單調棧 模板 單調棧模板

biu 單調棧主要用於求取左邊第乙個比它大,或者比它小的數。就比如站隊隨便排成一列,可以求到每個人後面第乙個比他高的人。同理可以推廣至右邊,比它矮均可。這就是單調遞增棧 遞減棧,從前至 棧,從後向前入棧的區別了。單調棧比較抽象,非常具有智慧型的想法,可應用的場景相當少,根據幾個經典題目體會它的用法會...

單調佇列 單調棧

參考文章 單調佇列 poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 n 106 m n n 106,m n n 106 m n 直接暴力求解複雜度在0 mn 可以考慮維護區間最值,單調佇列則是維護區間佇列的強大 單調佇列的定義 單調佇列實現的大致過程 1...