poj 2823 單調佇列

2022-04-28 16:33:08 字數 940 閱讀 5751

題目大意

給定一行數,共n個。有乙個長度為k的視窗從左向右滑動,視窗中始終有k個數字,視窗每次滑動乙個數字。求各個時刻視窗中的最大值和最小值。

題目分析

單調佇列/棧中存放的一般為序列元素的索引(可能還有其他更多資訊),且每次新元素和隊尾/棧頂元素比較,若滿足單調性質,則入隊/入棧;否則,不斷彈出隊尾/棧頂元素,直到滿足單調性質,再入隊/入棧。

實現(c++)

#define _crt_secure_no_warnings

#include#define max_size 1000005

int gmaxinwindow[max_size];

int gmininwindow[max_size];

int gincq[max_size];

int gdecq[max_size];

int garray[max_size];

int main()

inc_tail++;

gincq[inc_tail] = i;

while (dec_tail >= dec_front && garray[gdecq[dec_tail]] <= ele)

dec_tail++;

gdecq[dec_tail] = i;

if (i - gincq[inc_front] >= k)

if (i - gdecq[dec_front] >= k)

if (i >= k - 1)

} for (int i = 0; i <= n - k; i++)

printf("\n");

for (int i = 0; i <= n - k; i++)

return 0;

}

POJ 2823單調佇列

g tle了,c 5329ms險過。用g 交了幾遍,總覺得沒錯,也沒改就反覆交了,傻裡傻氣的。再在網路上找了一 g ce後c 過了,就也試著用c 交自己的 了,過了。要不咱研究研究g 和c 好了 以上全是廢話!include using namespace std const int nn 1000...

單調佇列 poj2823

這段話 初談這個話題,相信許多人會有一種似有所悟,但又不敢確定的感覺。沒錯,這正是因為其中 單調 一詞的存在,所謂單調是什麼,學過函式的people都知道單調函式或者函式的單調性,直白一點說單調就是一直增或一直減。例如 1,3,5,9就是乙個單調增數列,數列中不存在後乙個數比前乙個數小的現象。那麼同...

初談單調佇列 POJ 2823

前幾天做過這題.當時使用線段樹做的.要跑9500ms才能過.今天看了下單調佇列.以為很難.但理解一下.發現單調佇列其實很簡單.單調佇列是從數列前掃到數列後.維護乙個最值或者乙個所需的最優解之類的.每次的最優解都是在佇列的頭.所以要一直維護佇列.使其從頭到尾都是單調的.要能保證如果當前頭要出去了.後面...