題目大意
給定一行數,共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才能過.今天看了下單調佇列.以為很難.但理解一下.發現單調佇列其實很簡單.單調佇列是從數列前掃到數列後.維護乙個最值或者乙個所需的最優解之類的.每次的最優解都是在佇列的頭.所以要一直維護佇列.使其從頭到尾都是單調的.要能保證如果當前頭要出去了.後面...