尺取 二分 三分(函式模板)

2021-10-03 07:17:07 字數 876 閱讀 6826

一、尺取

設定兩個下標表示區間的左右端點,根據實際情況推進兩個端點求得答案。

/**

給定乙個序列a,求a中元素和大於等於s的子串行的最小長度

(保證a中元素都為正)

*/int

take()

//尺取}}

return ans;

}

二、二分

查詢x第一次出現的位置

/**

有乙個序列a,a中元素滿足單調遞增(任意下標i和j滿足iint

binary_first

(int x)

//二分查詢x第一次出現的位置

return l;

}

查詢x最後一次出現的位置

/**

有乙個序列a,a中元素滿足單調遞增(任意下標i和j滿足iint

binary_last

(int x)

//二分查詢x最後一次出現的位置

return a[r]

==x?r:l;

}

c++還有兩個函式:

lower_bound

() 返回a中第乙個大於等於x的元素下標

upper_bound

() 返回a中第乙個大於x的元素的下標

三、三分

/**

計算凸(凹)函式的最大值(最小值)。

*/void

thrp()

//三分

return l;

}

二分 三分模板

適用於 單調函式 單調增或單調減 基本思想 給定9個數,由小到大排列,從這9個數中找出某乙個確切的數 比如4 偽 int binary sreach int a,int left,int right,int x if a left x return left return 1 給你三個陣列a,b,c...

尺取 二分查詢

尺取法 這是一種比較有趣的方法,想吃子一樣去解決問題。現在我只是知道了可以用陣列來模擬 尺子 加油學習!方法是 陣列模擬 二分查詢 說一 下資料的意思,10個數,從中找出和為15的最短子串。10 5 1 3 5 10 7 4 9 2 8 15 include using namespace std ...

K th Number(尺取 二分)

傳送門 釐清題意很重要,給你乙個序列a,再給出k,m,將a中每個區間的第k大元素放入b序列,問b序列的第m大元素是多少。思路 可以想到一段序列的所有區間數是固定的,每個區間的第k大也都是固定的。假設b序列的第m大元素是x,則可知大於等於x的數有m個,即對於a序列的所有區間第k大,大於x的有m個。這裡...