JZOJ4256 平均數 二分

2022-09-01 10:45:10 字數 1529 閱讀 2305

給出包含乙個n

n個整數的陣列a

a。找出一段長度至少為m

m的連續序列,最大化它的平均值。

很明顯這道題的答案滿足單調性。若可以找出一段區間的平均值超過k

k,那麼必然可以找到一段區間的平均值超過k−1

k−1。

那麼可以考慮二分答案。

設二分的答案為ans

ans若

(∑ij

a[i]

)÷(j

−i)≥

ans(

j−i+

1≥m)

(i∑j

​a[i

])÷(

j−i)

≥ans

(j−i

+1≥m

)則∑i

ja[i

]≥an

s×(j

−i)i

∑j​a

[i]≥

ans×

(j−i

)∑ij

a[i]

−ans

×(j−

i)≥0

i∑j​

a[i]

−ans

×(j−

i)≥0

∑ij(

a[i]

−ans

)≥0i

∑j​(

a[i]

−ans

)≥0於是可以用字首和su

m[i]

=∑j=

1i(a

[i]−

ans)

sum[

i]=j

=1∑i

​(a[

i]−a

ns)然後我們就要最大化sum

[i]−

sum[

j](i

−j+1

≥m)s

um[i

]−su

m[j]

(i−j

+1≥m

)於是可以記錄max

(sum

[k])

(k∈1

∼j−1

)max

(sum

[k])

(k∈1

∼j−1

)。然後列舉i

i,判斷最大化後可否超過0。

時間複雜度o(n

logn

)o(n

logn

)

#include

#include

using

namespace std;

const

int n=

300010

;int n,m;

double l,r,mid,a[n]

,sum[n]

;bool

check

(double ans)

return0;

}int

main()

printf

("%lf"

,l);

return0;

}

P1404 平均數 二分

p1404 平均數 二分 這是乙個很常見的二分題目可能題目正解不是二分是單調佇列,而這題呢 我之前一直被幾組陣列卡到懷疑人生,01數規劃嘛就是讓a i mid,然後加起來如果 0那麼就滿足條件,然後我就想著長度為m的一定是最大的,但是資料教我做人,等下看 就知道了。include include i...

平均數 題解 二分 求逆序對

有一天,小a得到了乙個長度為n的序列。他把這個序列的所有連續子串行都列了出來,並對每乙個子串行都求了其平均值,然後他把這些平均值寫在紙上,並對它們進行排序,最後他報出了第k小的平均值。你要做的就是模仿他的過程。第一行兩個整數n,k,意義如題中所述。第二行n個正整數,即為小a得到的序列。一行乙個實數,...

聯賽模擬測試5 平均數 二分答案 逆序對

之前做過類似的兩道題,一道是區間和的 k 小值,一道是眾數的 k 小值 那兩道統計的東西都有單調性,可以用兩個指標維護,o n 計算 但是平均數沒有單調性,不能用兩個指標去掃 但是這道題的資料範圍是 10 5 時間限制是 2.5s 統計答案時還可以再套乙個 log 如果當前列舉的平均值是 mid 的...