尺取法只能具有單調性的資料
反覆地推進區間的開頭和末尾,來找滿足條件的最小區間(一般要求個數或者是最小的)
右端到臨界狀態後,判斷是否滿足條件,更新結果
左端右移
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...