題目描述
有一天,你拿來了乙個長方形的容器,然後開始往裡面倒水。
這個長方形的容器由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...