資料結構 單調棧

2022-04-30 23:57:14 字數 1630 閱讀 8434

之前沒有寫過棧棧是只能在某一端插入和刪除的特殊線性表就像乙個桶一樣 我們可以用stl 也可以自己寫

進棧top++ 然後 _stack[top]=進棧元素

退棧可以將退棧後的乙個元素賦值到乙個地方 top–

單調棧故名思議 就是多了個 單調 的要求

(以下文字引用於shuyu fang的部落格)

若是單調遞增棧 則從棧頂到棧底的元素是嚴格遞增的 若是單調遞減棧 則從棧頂到棧底的元素是嚴格遞減的 越靠近棧頂的元素越後進棧

元素進棧過程: 對於單調遞增棧 若當前進棧元素為e 從棧頂開始遍歷元素 把小於e或者等於e的元素彈出棧 直接遇到乙個大於e的元素或者棧為空為止 然後再把e壓入棧中 對於單調遞減棧 則每次彈出的是大於e或者等於e的元素

洛谷p1901 發射站

題目描述

某地有 n 個能量發射站排成一行,每個發射站 i 都有不相同的高度 hi,並能向兩邊(當 然兩端的只能向一邊)同時發射能量值為 vi 的能量,並且發出的能量只被兩邊最近的且比 它高的發射站接收。

顯然,每個發射站發來的能量有可能被 0 或 1 或 2 個其他發射站所接受,特別是為了安 全,每個發射站接收到的能量總和是我們很關心的問題。由於資料很多,現只需要你幫忙計 算出接收最多能量的發射站接收的能量是多少。

輸入輸出格式

輸入格式:

第 1 行:乙個整數 n;

第 2 到 n+1 行:第 i+1 行有兩個整數 hi 和 vi,表示第 i 個人發射站的高度和發射的能量值。

輸出格式:

輸出僅一行,表示接收最多能量的發射站接收到的能量值,答案不超過 longint。

輸入輸出樣例

輸入樣例:

3 4 2

3 5

6 10

輸出樣例:

7題解中有講解

342

35610

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define in =read()

const

int size = 1000000 + 50;

ll _stack[size],pos[size],b[size];

ll n,top,ans;

struct dataa[size];

inline ll max(ll x,ll y)

inline ll read()

while(isdigit(ch))

return num*f;

}inline

void f (int x)

for(i=1,top=0;i<=n;i++) f(i);

for(i=n,top=0;i;i--) f(i);

/* for(int i=0;i<=n;i++)

//coyg

資料結構 單調棧

上班無事,刷力扣發現了個新名詞 單調棧 題目 496.下乙個更大元素 i 名字上就聽的出來,單調棧中存放的資料應該是有序的,所以單調棧也分為單調遞增棧和單調遞減棧 單調遞增棧 棧中資料出棧的序列為單調遞增序列 單調遞減棧 棧中資料出棧的序列為單調遞減序列 ps 這裡一定要注意所說的遞增遞減指的是出棧...

資料結構 單調棧

這是筆者的第一篇部落格,由於筆者自身水平的限制。用詞可能不夠準確,句子不太通順,水平可能也不太行,敬請指出,感激不盡!我們都知道棧 stack 是一種先入後出的資料結構,而單調棧建立在棧的基礎上,它區別於普通的棧的特殊之處在於 棧中的元素一直保持著單調遞增 單調遞減的關係 比如單調遞增棧中的元素自棧...

資料結構之單調棧

dev.c 資料結構之單調棧 從數學上來講,函式的單調性也可以叫做函式的增減性。當函式f x 的自變數在其定義區間內增大 或減小 時,函式值f x 也隨著增大 或減小 則稱該函式為在該區間上具有單調性。換句話來說,函式的單調性就是在區間內的自變數只增或只減。我們說,數學中函式在一段區間內自變數只增或...