USACO12MAR 花盆 二分 單調佇列

2022-05-20 22:51:08 字數 519 閱讀 9574

存在乙個長度為\(x\)的區間\([l,r]\),使得區間中最大值與最小值差至少為\(w\),求這個最小的\(x\)

\(n\le 100000\),\(w\le 1000000\)

顯然區間長度\(x\)越大,最值之差越大,滿足單調性,上二分答案,問題轉化為是否存在長度為\(mid\)的區間中最值之差至少為\(w\),而這個問題可以用單調佇列(滑動視窗)\(o(n)\)解決。

單調佇列存的下標,首先判斷隊首是否合法(視窗大小),然後按照「比你強還比你年輕」的原則彈隊尾維護佇列即可。

#include #include #define maxn 100010

using namespace std;

int n,d;

struct nod

return 0;

}int main()

printf("%d\n", ans);

return 0;

}

USACO12MAR 花盆(單調佇列)

有n個點 x,y 求乙個在 x 軸上的最小區間,使得它包含的所有點中的 y 的極差至少為 d x,y,d leq 10 6 將點按 x 排序,顯然 2 pointers 需要隨時維護乙個滑動視窗的最大值和最小值,顯然單調佇列 也可以用離散化 st表或者線段樹,不過多了個log include def...

二分演算法1(單值)

二分演算法求非線性方程的根 單根 include using namespace std include double bisection double x0,double x1,double eps1,double eps2,int pbis,double funcptr double 二分法,x...

藍書1 2 二分和三分

t1 poj 2018 題目大意 乙個數列 求乙個平均數最大的 長度不長於l的子串 思路 二分乙個值 x 假設這個數為平均值 則當所有數列都減去這個值時 若剩餘數列中長度不小於l的最大子串非負 則l mid 最大子串可以表示為一段字首和減去之前一段最小的字首和且長度大於l 就可以o n 來check...