滑動視窗最值(單調佇列)
問題:給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。
解法:利用單調佇列來儲存未過期(在w視窗內)的之前的最大值,如果當前值大於該值,就從隊首彈出,直到找到大於當前值得位置,將當前值的位置壓入隊首,如果資料過期,就從隊尾刪除。(單調佇列)
int a[maxn];
int n;
int w;
deque<int> q;
void solve() {
for (int i = 0; i<n; i++) {
while (!q.empty()&&a[i] >= a[q.front()]) q.pop_front();
q.push_front(i);
if (a[i] < a[q.front()]) q.push_front(i);
if (i - q.back() == w) q.pop_back();
if (i >= w - 1) cout << a[q.back()] << endl;
}
}
相關推薦
滑動視窗最值(單調佇列)
問題:給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。 解法:利用單調佇列來儲存未過期(在w視窗內)的之前的最大值,如果當前值大於該值,就從隊首彈出,直到找到大於當前值得位置,將當前值的
POJ2823 滑動視窗中元素的最值(單調佇列)
給定一個大小已知的陣列以及一個大小已知的滑動視窗,視窗每個時刻向後移動一位,求出每個時刻視窗中數字的最大值和最小值。 這個題是單調佇列的入門題。 求最大值:建立一個單調遞減佇列,元素從左到右依次入隊,入隊之前必須從佇列尾部開始刪除那些比當前入隊元素小或者相等的元素,直到遇到
18.12.16 滑動視窗(單調佇列)
描述 給定一個長度為n(n<=10^6)的陣列。有一個大小為k的滑動視窗從陣列的最左端移動到最右端。你可以看到視窗中的k個數字。視窗每次向右滑動一個數字的距離。 下面是一個例子: 陣列是 [1 3 -1 -3 5 3 6 7], k = 3。
最大矩形面積 (單調佇列)
目錄 目錄 目錄 最大矩形面積 題目 程式碼 正解 程式碼(2) 附(矩形牛棚) 程式碼(3) 最大矩形面積 題目 此題很容易想到的一個方法莫過於暴搜了, 程式碼 #include<cstdio>
P1725 琪露諾 題解(單調佇列)
題目連結 琪露諾 解題思路 單調佇列優化的\(dp\)。 狀態轉移方程:\(f[i]=max{f[i-l],f[i-l+1],...,f[i-r-1],f[i-r]}+a[i]\) 考慮單調佇列優化。 因為剛學,不是很熟悉單調佇列,特寫一篇詳細的解釋。 \(queue\) 陣列儲存一個佇列,他的頭部和尾
51Nod 1275 - 連續子段的差異(單調佇列)
【題目描述】 【思路】 固定左端點 i i i,向右尋找一個最遠的右端點
洛谷3594 [POI2015]WIL-Wilcze doły(單調佇列)
題目 給定一個長度為n的序列,你有一次機會選中一段連續的長度不超過d的區間,將裡面所有數字全部修改為0。請找到最長的一段連續區間,使得該區間內所有數字之和不超過p。 特性 選擇一個區間[i,i+d-1],那麼我們選擇的最長區間一定在這個區間附近,也就是連續的。 題解 單調佇列
[BZOJ2276][Poi2011]Temperature(單調佇列)
Address 洛谷P3522 BZOJ2276 LOJ#2164 Solution 先解決一個小問題:如何判斷一個連續子段是否合法。 很容易得出, a
POJ-2823-Sliding Window (單調佇列)
原題連結: http://poj.org/problem?id=2823 An array of size n ≤ 10 6 is given to you. There is a sliding window of size k which is moving from the ver
Six Degrees of Cowvin Bacon-POJ2139-最短路(優先佇列)
題意: 牛在同一部影片裡,則距離為1,通過1箇中間牛傳遞則是2,然後就想節點之間的距離一樣傳遞。此外該圖是連通圖。然後就是對每頭牛都用Dijikstra跑一遍。所以要用優先佇列優化,否則會TLE。 水題
poj2823(單調佇列)
思路:模板題 #pragma GCC optimize(2) #include <cstdio> #include <cstdlib> #include <cstri
bzoj1047: [HAOI2007]理想的正方形(單調佇列)
原題連結 題目描述:有一個ab的整陣列成的矩陣,現請你從中找出一個nn的正方形區域,使得該區域所有數中的最大值和最小值的差最小。 輸入格式:第一行為3個整數,分別表示a,b,n的值第二行至第a+1行每行為b個非負整數,表示矩陣中相應位置上的數。每行相鄰兩數之間用一空格分隔。 100%的資料2<=a,
ACM-ICPC 2018 徐州賽區網路預賽G (單調佇列)
傳送門 題面: There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xx , yy ) means the wave is a rectan
hdu 3530(單調佇列)
傳送門 題解: 用一個單調不升的佇列維護最大值,一個單調不減的佇列維護最小值。如果不滿足條件,後移答案區間左端點,取兩個佇列頭指標的元素較小的一個(位置儘量靠前使區間儘量長)。 #include&
杭電多校第三次 Problem A. Ascending Rating(單調佇列)
【題意】 給你一個長為n的陣列a 讓你對於每個長度為m的視窗。 算出其中的最大值以及從左往右遍歷的時候這個最大值更新的次數。 【題解】 單調佇列。 從後往前滑動視窗。 會發現我們維護以這個
哈理工OJ 1522 子序列的和(單調佇列)(dp)
子序列的和 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 289(61 users) Total Accepted: 71(43 users) Rating: Special Judge: No
POJ 2823 Sliding Window (單調佇列)@
An array of size n ≤ 10 6 is given to you. There is a sliding window of size kwhich is moving from the very left of the array to the ve
【POJ 2823】Sliding Window(單調佇列)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 56138 Accepted: 1613
NOI 3.4 佇列 2729:Blah數集(單調佇列)
2729:Blah數集總時間限制: 3000ms 記憶體限制: 65536kB描述大數學家高斯小時候偶然間發現一種有趣的自然數集合Blah,對於以a為基的集合Ba定義如下:(1) a是集合Ba的基,且a是Ba的第一個元素;(2)如果x在集合Ba中,則2x+1和3x+1
POJ 2823 (從經典滑動視窗最大值問題入門單調佇列)
題目連結 題目大意 輸入一個長度為n(n≤106)的數列,給定一個長度為k的視窗,讓這個視窗在數列上移動,求移動到每個位置視窗中包含數的最大值和最小值。即設序列為A1,A2,…,An,設f(i)=min{Ai−k+1,Ai−k+2,…,Ak} ,g(