一、尺取
設定兩個下標表示區間的左右端點,根據實際情況推進兩個端點求得答案。
/**
給定乙個序列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個。這裡...