專題 單調佇列

2021-07-25 06:25:33 字數 1632 閱讀 3915

單調佇列就是佇列中元素滿足單調性

入隊:從隊尾入隊,在入隊的時候刪掉隊尾比當前入隊的元素大(或小)的元素

出隊:出隊是直接把隊頭元素取出

poj2823 sliding window(滑動視窗)

給定乙個長為n陣列以及乙個長為k的滑動視窗,視窗每個時刻向後移動一位,求出每個時刻視窗中數字的最大值和最小值。

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int inf=999999999;

const

int maxn=1000005;

int a[maxn];

int c[maxn];//c[i]表示佇列中的第i個數在陣列a中的位置

int minm[maxn];

int maxm[maxn];

int n,m;

int st,en;

void get_min()

}void get_max()

}int main()

get_min();

get_max();

for(int i=m;i<=n;i++)

cout

<" ";

cout

cout

<" ";

cout

0;}

hdu5945題目鏈結

給你三個數x,k,t 每次可以進行以下兩種操作之一:1:

x=x−

i,(0

≤i≤t

)

2.如果k

|x,x

=xk

(0≤t

≤106,

1≤x,

k≤106

)

問最少經過多少次操作能從x變到1

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int inf=999999999;

const

int maxn=1000005;

int t;

int x,k,t;

int p[maxn];//目標函式的單調佇列

int pos[maxn];//pos[i]表示佇列中第i個元素在f中的位置

int f[maxn];//狀態

int head,tail;

int main()

p[++tail]=f[i];pos[tail]=i;

}cout

<}

}

單調佇列專題總結

1 hdu 4193 題意 n個數組成的序列環,求長度小於等於m的字串的最大區間和。思路 如果n個數為線性關係,可以用單調佇列維護第i個數之前的m個數,及時剔除沒用的數。o n 解決。這裡是環,2倍陣列破環成鏈即可。非自己寫 include include includeusing namespac...

單調佇列優化專題

poj1821 這題是一道比較典型的佇列優化問題吧,狀態方程如下 dp i j max max,dp i 1 j dp i j 1 第i個人不刷,第i個人刷 第j面牆不刷,列舉所有可能結尾的牆 dp i j 表示前i個人刷前j面牆的最大值,且第j面牆必須刷。這題第一用到了雙端佇列deque,學習了不...

單調佇列,棧專題

a題 hdu 1506 題目大意 給你n個點,每乙個點代表當前座標下的矩形的高度,然後問你最大的矩形面積。具體思路 我們可以用乙個棧維護最大值,這個棧內的元素都是保持單調的,如果當前輸入的數比棧頂元素小的話,這個時候我們先算一波棧裡面的最大值,判斷停止的時候是當棧頂元素比當前輸入的元素小的時候停就可...