單調棧理解及應用

2021-08-10 16:46:01 字數 950 閱讀 3665

單調棧:棧內元素,按照(單調遞增或單調遞減)排序,如果新入棧元素破壞了單調性,就彈出棧內元素,直到滿足單調性。

作用:o(n)時間複雜度分別求左右兩邊第乙個比它大或比它小的元素。

(單調遞增棧為例)

維護:每次入棧前先檢驗棧頂元素和進棧元素的大小,判斷棧內元素是否出棧(棧內元素大於等於入棧元素則棧內元素出棧),直到進棧元素入棧。

發揮作用的原理:

1.進棧元素能入棧的時候,此時棧頂元素一定是第乙個左邊第乙個比進棧元素小的元素。

2.棧內元素出棧的時候,此時進棧元素一定是第乙個右邊第乙個比棧頂元素小的元素。

ok!poj 2559

題解: 列舉每個位置高度,對於每個高度(h),找兩邊第乙個比它小的位置(l,r),那麼以當前高度構柱形面積為:(r-l-1)*h

code:

//#pragma comment(linker, "/stack:102400000,102400000")

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef __int64 ll;

const int n = 100010;

struct nodenode[n];

stacksta;

int main()

if(!sta.empty())

node[i].l = sta.top().id;

sta.push(node[i]);

}ll mx = 0;

for(int i = 1; i <= n; i++)

printf("%lld\n",mx);

}return 0;

}

單調棧的性質及應用

zzuli 題意 給你一串串行,要你求所有子串行的最小值之和。n很大,無法暴力 思路 完美的單調棧模板 這裡簡要介紹下單調棧的性質,其他的都沒用 單調棧的維護是 o n 級的時間複雜度,因為所有元素只會進入棧一次,並且出棧後再也不會進棧了。單調棧的性質 1.單調棧裡的元素具有單調性 2.元素加入棧前...

單調棧的應用

問題描述 柱狀圖是有一些寬度相等的長方形下端對齊後橫向排列得到的圖形。現在有n個由寬度為1,高度分別為h1,h2,hn的長方形從左到右依次排列組成的柱狀圖。問裡面包含的長方形的最大面積是多少?分析 最容易想到的方法是 討論左端l和右端r。如果確定了長方形的左端l和右端r,那麼最大的可能高度就是min...

單調棧的應用

筆者在做leecode的題 求柱形的最大面積 時,接觸到了單調棧這一資料結構,經過研究發現,單調棧是乙個比較簡單的資料結構,但是要靈活運用卻十分不簡單。單調遞增棧 資料出棧的序列為單調遞增序列 單調遞減棧 資料出棧的序列為單調遞減的序列 描述 有n個人站隊,所有的人全部向右看,個子高的可以看到個子低...