單調佇列就是佇列中元素滿足單調性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個點,每乙個點代表當前座標下的矩形的高度,然後問你最大的矩形面積。具體思路 我們可以用乙個棧維護最大值,這個棧內的元素都是保持單調的,如果當前輸入的數比棧頂元素小的話,這個時候我們先算一波棧裡面的最大值,判斷停止的時候是當棧頂元素比當前輸入的元素小的時候停就可...