給出乙個矩形,其中0
00代表完好,1
11代表破損,求出從中能截出的矩形個數。
容斥思想,用總的−
-−破損的方案自然得出答案。
對於乙個點,我們發現只有它左邊和上面的破點對它有貢獻,且破點的座標是單調遞減的,即當我們的x
xx座標越大,y
yy座標就要越小,這裡使用單調棧維護距離每一列最近的破點。
#include
#include
long
long n, ans, sum;
long
long a[
1001][
1001
], last[
1001][
1001
], f[
1001][
1001];
std::stack<
int> s[
1001];
intmain()
printf
("%lld"
, sum - ans)
;}
資料結構 單調棧
上班無事,刷力扣發現了個新名詞 單調棧 題目 496.下乙個更大元素 i 名字上就聽的出來,單調棧中存放的資料應該是有序的,所以單調棧也分為單調遞增棧和單調遞減棧 單調遞增棧 棧中資料出棧的序列為單調遞增序列 單調遞減棧 棧中資料出棧的序列為單調遞減序列 ps 這裡一定要注意所說的遞增遞減指的是出棧...
資料結構 單調棧
這是筆者的第一篇部落格,由於筆者自身水平的限制。用詞可能不夠準確,句子不太通順,水平可能也不太行,敬請指出,感激不盡!我們都知道棧 stack 是一種先入後出的資料結構,而單調棧建立在棧的基礎上,它區別於普通的棧的特殊之處在於 棧中的元素一直保持著單調遞增 單調遞減的關係 比如單調遞增棧中的元素自棧...
資料結構 單調棧
之前沒有寫過棧棧是只能在某一端插入和刪除的特殊線性表就像乙個桶一樣 我們可以用stl 也可以自己寫 進棧top 然後 stack top 進棧元素 退棧可以將退棧後的乙個元素賦值到乙個地方 top 單調棧故名思議 就是多了個 單調 的要求 以下文字引用於shuyu fang的部落格 若是單調遞增棧 ...