單調棧理解及應用
單調棧:棧內元素,按照(單調遞增或單調遞減)排序,如果新入棧元素破壞了單調性,就彈出棧內元素,直到滿足單調性。
作用:o(n)時間複雜度分別求左右兩邊第一個比它大或比它小的元素。
(單調遞增棧為例)
維護:每次入棧前先檢驗棧頂元素和進棧元素的大小,判斷棧內元素是否出棧(棧內元素大於等於入棧元素則棧內元素出棧),直到進棧元素入棧。
發揮作用的原理:
1.進棧元素能入棧的時候,此時棧頂元素一定是第一個左邊第一個比進棧元素小的元素。
2.棧內元素出棧的時候,此時進棧元素一定是第一個右邊第一個比棧頂元素小的元素。
ok!
poj 2559
題解: 列舉每個位置高度,對於每個高度(h),找兩邊第一個比它小的位置(l,r),那麼以當前高度構柱形面積為:(r-l-1)*h
code:
作用:o(n)時間複雜度分別求左右兩邊第一個比它大或比它小的元素。
(單調遞增棧為例)
維護:每次入棧前先檢驗棧頂元素和進棧元素的大小,判斷棧內元素是否出棧(棧內元素大於等於入棧元素則棧內元素出棧),直到進棧元素入棧。
發揮作用的原理:
1.進棧元素能入棧的時候,此時棧頂元素一定是第一個左邊第一個比進棧元素小的元素。
2.棧內元素出棧的時候,此時進棧元素一定是第一個右邊第一個比棧頂元素小的元素。
ok!
poj 2559
題解: 列舉每個位置高度,對於每個高度(h),找兩邊第一個比它小的位置(l,r),那麼以當前高度構柱形面積為:(r-l-1)*h
code:
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
typedef __int64 LL;
const int N = 100010;
struct Node{
int L,R;
int id,val;
}node[N];
stack<Node> sta;
int main()
{
int n;
while(~scanf("%d",&n) && n){
while(sta.size()) sta.pop();
for(int i = 1; i <= n; i++){
node[i].L = 0, node[i].R = n+1;
node[i].id = i;
scanf("%d",&node[i].val);
while(!sta.empty() && sta.top().val > node[i].val){
node[sta.top().id].R = i;
sta.pop();
}
if(!sta.empty())
node[i].L = sta.top().id;
sta.push(node[i]);
}
LL mx = 0;
for(int i = 1; i <= n; i++)
{
LL tmp = (LL)(node[i].R-node[i].L-1)*(LL)node[i].val;
mx = max(mx,tmp);
}
printf("%lld\n",mx);
}
return 0;
}
相關文章
- 單調棧/單調佇列佇列
- 單調棧和單調佇列佇列
- 單調棧 和 單調佇列佇列
- 單調棧模板
- 淺談單調棧
- 正規表示式理解及簡單應用舉例
- 簡單計算器(棧的應用)
- 單調棧學習小思考
- 演算法之單調棧演算法
- 棧(2)--棧的應用
- 基於應用理解的協議棧最佳化協議
- 理解 TCP/IP 網路棧 & 編寫網路應用TCP
- 特殊資料結構:單調棧資料結構
- HISTOGRA - 最大矩形面積(單調棧)
- 棧的應用
- 說說你對棧、佇列的理解?應用場景?佇列
- 單調棧進階-接雨水-最大矩形
- 【筆記】線段維護單調棧筆記
- Lucene介紹及簡單應用
- React+Redux 打造 “NEWS EARLY” 單頁應用 一個專案理解最前沿技術棧真諦ReactRedux
- 深入理解 JavaScript 單例模式及其應用JavaScript單例模式
- 簡單計算器 (關於棧的一種應用)
- 棧的原理與應用
- 01 . SaltStack部署配置及簡單應用
- 無源互調分析儀PIM Analyzer原理及應用
- 應用調優
- Leetcode:單調棧_可見山峰問題LeetCode
- LeetCode Monotone Stack Summary 單調棧小結LeetCodeMono
- 第十章 單調棧 Part2
- 聯想公司專案風險管理解決方案及應用
- 單機百萬連線調優和Netty應用級別調優Netty
- Restful 應用理解REST
- 資料結構與演算法 | 棧的實現及應用資料結構演算法
- HDU3530 單調佇列的應用佇列
- UDP 協議簡單瞭解及應用UDP協議
- Ubuntu下docker安裝及簡單應用UbuntuDocker
- ZwQuerySystemInformation列舉核心模組及簡單應用ORM
- 棧的應用和實現