給定正整數序列 a,求乙個平均數最大的,長度不小於 l 的(連續的)子段
為了方便計算所以所有數都乘上1000.
then, 二分均值。
n
nn 的範圍到 105
10^5
105考慮二分判斷結果如何在 o(n
)o(n)
o(n)
或 o(nl
ogn)
o(nlogn)
o(nlog
n)的複雜度內解決:
我們可以將所有數減去 mid ,然後累計字首和。
當一段數 a
ia_i
ai ~ aj(
j<=i
−l
)a_j (j <= i-l)
aj(
j<=i
−l) 的和 sum
[i]−
sum[
j]
sum[i]-sum[j]
sum[i]
−sum
[j] 大於0時,則符合條件。
我們可以使取值範圍內的 sum
[j
]sum[j]
sum[j]
盡量小,遂可以在 o(n
)o(n)
o(n)
內解決拉。
#include
int n, l;
long
long l, r, mid, a[
100011
], s[
100011
], ls[
100011];
bool
check
(long
long k)
return0;
}int
main()
l = s[l]
/ l;
while
(l < r)
printf
("%lld"
, l)
;//輸出
}
YbtOJ高效高階 二分 3 最大均值
ybtoj高效高階 二分 3 給定正整數序列a 求乙個平均數最大的,長度不小於 l 的 連續的 子段。10 66 4 21038 59 416500顯然二分 那要不然為啥是二分練習題呢 我們二分出這個平均值 然後把數列中每個數都減去這個平均值 然後找是否有一段長度不小於l的且和不為負數的數段即可 i...
k Means 二分k 均值演算法)
在上一節中我們已經講了k 均值演算法,當時我們選取的質心是隨機選取的,沒有什麼依據,所以聚類的結果很可能出現誤差,為了降低這種誤差的出現我們今天來研究一種優化的k 均值演算法 二分k 均值演算法,看到名稱我們就能明白在每次劃分的時候都是將資料劃分成倆份,直到達到我們要求的聚類數。怎麼來分?選取哪一堆...
二分K均值c 實現
二分k均值原理及python實現請見 1 2 python實現 c 基於python的思路寫的 求指點 include include include include include using namespace std typedef vectortuple const int dims 2 c...