題目:在乙個序列中找乙個最長子串,使得子串的m<=極差<=k.
維護乙個遞減的單調佇列q1(隊首為當前最大),同時維護乙個遞增的單調佇列q2(隊首為當前最小),控制最大減最小 小於等於k , 若最大減最小大於等於m,則更新答案。
**:
#include#include#include#include#includeusing namespace std;
const int n = 1e5+10;
typedef long long ll;
int q1[n*5],q2[n*5],a[n];
int main()
printf("%d\n",ans);
}return 0;
}
hdu 3530 單調佇列
單調佇列就是佇列中的元素是單調遞增或遞減的。比如把 5 2 3 1 4 入隊 減 增 5 5 5 2 2 5 3 2 3 5 3 1 1 5 4 1 4 這個還是好理解的,但是,我們得會用單調佇列這一特性去解決題目,抽象出題目中有類似的操作。subsequence 題意 給三個數 n,x,y 接下來...
hdu 3530 Subsequence 單調佇列
題目鏈結 題意 給定陣列,求得最長的區間,使得其中最大值與最小值的差值在給定的範圍內 m,k 思路 維護兩個佇列記錄元素下標,lo 與 hi 具體如何維護之後再講 保證 a lo 單調增,且記當前處理到下標 i 的位置,則 a lo x 即為 lo x 1 1 i 區間中的最小值 保證 a hi 單...
hdu 3530(單調佇列)
傳送門 題解 用乙個單調不公升的佇列維護最大值,乙個單調不減的佇列維護最小值。如果不滿足條件,後移答案區間左端點,取兩個佇列頭指標的元素較小的乙個 位置盡量靠前使區間盡量長 include include include include using namespace std const int m...