1. 程式人生 > >HDU1506 / POJ2339 Largest Rectangle in a Histogram 單調遞減棧

HDU1506 / POJ2339 Largest Rectangle in a Histogram 單調遞減棧

1.什麼是單調棧

  • 具有單調性和棧的性質
  • 單調遞減棧就是從棧底到棧頂是單調遞減的
  • 單調遞增棧就是從棧底到棧頂是單調遞增的

2.單調棧解決的問題

  • 以自己為最小值,找到最長的區間;單調遞增棧
  • 以自己為最大值,找到最長的區間;單調遞減棧
  • 給定一個區間找到這個區間的最大值或最小值

3.單調遞減棧的性質

對於第一個出棧的元素,它的右寬一定為0

對於第二個出棧的元素,它的右寬為第一個出棧元素的總寬

對於第三個出棧的元素,它的右寬為第二個出棧元素的總寬

。。。。。。。。

直到棧頂元素小於自己,才可以入棧;

入棧元素的左寬為上次出棧元素的總寬+1(自身);若無出棧元素,則左寬為1(自身)

最後將棧中所有元素出棧,考慮所有情況

(左寬就是比自己小的元素個數,右寬就是比自己小的