單調佇列,就是字面意思。
如何維護? (假設我們是單調減的佇列)
維護時,保證所有元素最多進隊一次出隊一次,複雜度o(n)
我們在隊頭放最大的元素,向右依次遞減。
在隊尾插入新元素時,檢查新元素是否比隊尾元素大:是,則刪除隊尾元素,直到 比隊尾元素小時,插入新元素在隊尾。
同時還要檢查一下,是否還在視窗範圍內
#includeusing namespace std;
const int maxn=1e6+5;
typedef pairp;
p single_q[maxn];
int head=1,tail=0;
int n,m,a[maxn];//題目資料
void push_singlequeue2(p now)//單調佇列(減)
void push_singlequeue(p now)//單調佇列(增)
int main()
puts("");
head=1,tail=0;
for(int i=1;i<=n;i++)
push_singlequeue2(p(i,a[i]));
puts("");
}
洛谷1886 滑動視窗 模板 單調佇列
1886 題目描述 有乙個長為 nn 的序列 aa,以及乙個大小為 kk 的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1,3,1,3,5,3,6,7 and k 3。輸入格式 輸入一共有兩行,第一行有兩個正整數 n,kn...
單調佇列 洛谷P1886 滑動視窗
題目鏈結 dalao題解 題目給乙個長度為n的序列,然後給乙個值k,要求出長度為k的視窗在數列滑動過程中的最大值和最小值 圖示如下 比如給乙個長度為n 8的序列為 1 3 1 3 5 3 6 7 視窗長度是k 3 那麼視窗滑動中的 最小值就是 1 3 3 3 3 3 最大值就是 3 3 5 5 6 ...
洛谷 P1886 滑動視窗 單調佇列
現在有一堆數字共n個數字 n 10 6 以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1 3 1 3 5 3 6 7 and k 3.輸入格式 輸入一共有兩行,第一行為n,k。第二行為n個數 輸出格式 輸出...