尺取法(單調性 找區間個數或最小區間)

2021-08-28 13:26:57 字數 1435 閱讀 9304

尺取法只能具有單調性的資料

反覆地推進區間的開頭和末尾,來找滿足條件的最小區間(一般要求個數或者是最小的)

右端到臨界狀態後,判斷是否滿足條件,更新結果

左端右移

num具有單調性,可用尺取法

#include#includeusing namespace std;

#include#include#includeconst int n=1e6+10;

const int inf=0x3f3f3f3f;

int a[n];

sets;

mapmp;//標記每本書是否被讀過

int main()

int num=s.size();

int l=1,r=1;

int cnt=0;

int ans=inf;

while(l<=n) //框架是起點<=最後

return 0;

}

poj2739

題意:給乙個數n,求有多少個連續素數區間 使得和n

//ac

#include#includeconst int n=10010;

int prime[n];

int tag[n];

int cnt=0;

int x;

void getprime()//線性篩

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

int l=1,r=0;

ll money=c;

int flag=0;

while(l<=n)

else break; //不夠到就終止

}if(r-l>=n)

money+=p[r]; //沒這兩行就無法正常執行 沒有想明白為什麼

r++;

/*money-=p[l];

l++;*/

}if(flag) printf("%d\n",l);

else if(!flag) printf("-1\n");

}/*while(l<=n&&r-l+1<=n)ac** //別人的我感覺更好的**

輸入:數列元素個數,要求數目   數列   要求數t

連續區間內絕對值之和最接近t  輸出絕對值之和 下界 上界

參考部落格

尺取法列舉區間

尺取法也叫 追逐法 two pointer 顧名思義,像尺子一樣,一塊一塊的擷取。尺取法比直接暴力列舉區間效率高很多,尤其是資料量大的時候,所以說尺取法是一種高效的列舉區間的方法,是一種技巧。用尺取法來優化,可以使複雜度降為o n 是不是解釋的有點讓人納悶 沒關係,下面我們通過這個題目來體會尺取法的...

1495 中國好區間 尺取法

鏈結在這裡 問的是乙個數字序列中,有多少個第k大的數 t的區間.這題相當於問 有多少個 k個 滿足大於等於t 的元素的區間.預處理dp i 為前i項元素 t的元素個數之和.尺取維護l和r.如果dp r dp l 1 k,說明 l,r 這個區間是合法的,那麼對於l來說,l,e 其中e r,n 都是合法...

尺取法 求滿足條件的最小區間

給n個數 乙個s 求總和大於等於s的連續子串行的長度最小值,不存在輸0 一開始想暴力 for遍歷起點 for 1長度到可以的長度 tle 上面的想法就是確定 起點 終點 現在通過乙個sum i a0 ai 1 這個字首和 把一段連續子串行表達成兩個字首和的差值 即 as at 1 sum t sum...