單調棧:單調遞增或單調減的棧,主要通過push和pop兩個操作巧妙的解決一些有關序列的問題。
#include
#include
#include
#include
#define ll long long
using namespace std;
const int mod =
998244353
;const int maxn =
3e6+10;
ll a[maxn]
;ll f[maxn]
;stack s;
int main()
for(int i =
1; i <= n; i++
)else
s.push
(i);}}
for(int i =
1; i <= n; i++
)return0;
}
#include
.h>
#define ll long long
#define t int t
;scanf
("%d",&
t);while(t
--)using namespace std;
const int mod =
998244353
;const int maxn =
1e6+10;
int a[maxn]
;int last[maxn]
;int vis[maxn]
;vector ans;
int main()
for(int i =
1; i <= n; i++
) vis[a[i]]=
1;//選當前數
ans.
push_back
(a[i]);
}for
(int i =
0; i < ans.
size()
; i++
)return0;
}
再來幾道經典例題
題意有n頭牛,每頭牛可以看到右側比他矮的牛,求每頭牛可看到牛的總數。
思路利用單調棧,碰到一頭牛判斷與棧頂的牛的高度,低於棧頂的牛就把當前牛入棧(下標),否則,邊出棧邊計算下標差值(可看到牛的數量)。
注意最後加一頭1e9的牛便於棧清空和棧牛剩餘牛的可見數量的計算。
#include
#include
#include
#include
#define ll long long
using namespace std;
const int mod =
998244353
;const int maxn =
1e6+10;
ll a[maxn]
;stack s;
int main()
a[n]
=1e9
;//為了最後清空棧
for(ll i =
0; i <= n; i++
)else
s.push
(i);
//把當前牛入棧(下標) 為了計算}}
printf
("%lld\n"
, ans);}
return0;
}
題意:已知n個矩形的高度,寬度都為1,求最大面積。
思路:利用單調棧,每次遇到乙個矩形,判斷與棧頂的關係,若當前高度》棧頂矩形,則入棧,否則,依次把棧裡的矩形出棧,並計算以出棧的矩形為最高高度的大矩形的面積(當前的矩形不進入計算)。
注意:在最後加一塊高度為-1的矩形便於最後棧的清空與棧內矩形計算。
**
#include
#include
#include
#include
#define ll long long
using namespace std;
const int mod =
998244353
;const int maxn =
1e6+10;
ll a[maxn]
;stack s;
int main()
a[n]=-
1;//為了最後清空棧
ans =0;
ll cnt =0;
for(ll i =
0; i <= n; i++
)else
s.push
(top)
;//可延伸到的最左側入棧
a[top]
= a[i]
;//入棧的高度為當前的高度}}
printf
("%lld\n"
, ans);}
return0;
}
關於單調棧
單調棧是個什麼概念呢?其實說白了它就是個棧這是廢話 咳,舉個栗子 因為2比3小,所以直接砍掉 然後2比1大,所以2就待在1上面。也就是說棧裡存著乙個單調序列。那麼單調棧有啥用呢?我們來看個例題 農民john的某 n 頭奶牛 1 n 80,000 正在過亂頭髮節!由於每頭牛都 意識到自己凌亂不堪的髮型...
關於單調佇列的個人理解
一 何為單調佇列?1 首先搞懂,什麼是佇列 佇列是一種資料結構,兩個埠,乙個埠進元素,乙個埠出元素,那麼,根據這種操作的定義,不難發現 佇列具有 先進先出 的性質 2 單調佇列 單調佇列,顧名思義,具有的單調性的佇列,即佇列中的元素按照某種特徵有一定的順序。比如單調遞增的佇列,單調遞減的佇列。3 舉...
單調棧 模板 單調棧模板
biu 單調棧主要用於求取左邊第乙個比它大,或者比它小的數。就比如站隊隨便排成一列,可以求到每個人後面第乙個比他高的人。同理可以推廣至右邊,比它矮均可。這就是單調遞增棧 遞減棧,從前至 棧,從後向前入棧的區別了。單調棧比較抽象,非常具有智慧型的想法,可應用的場景相當少,根據幾個經典題目體會它的用法會...