之前做過類似的兩道題,一道是區間和的\(k\)小值,一道是眾數的\(k\)小值
那兩道統計的東西都有單調性,可以用兩個指標維護,\(o(n)\)計算
但是平均數沒有單調性,不能用兩個指標去掃
但是這道題的資料範圍是 \(10^5\),時間限制是\(2.5s\)
統計答案時還可以再套乙個\(log\)
如果當前列舉的平均值是\(mid\)的話
我們只需要找出所有\(\frac \leq mid\)的數對即可
我們把分母乘過去,就變成了\(sum[i]-mid \times i \geq sum[j]-mid \times j\)
可以看成區間求逆序對
用樹狀陣列做需要離散化,用歸併排序比較方便
#include#include#includetypedef double db;
const int maxn=1e6+5;
const db eps=1e-6;
int n,a[maxn];
long long sum[maxn],m,js;
db b[maxn],c[maxn];
void msort(int l,int r)
int main()
for(int i=1;i<=n;i++)
double l=-1e9,r=1e9,mids;
while(r-l>eps)
printf("%.4f\n",mids);
return 0;
}
P1404 平均數 二分
p1404 平均數 二分 這是乙個很常見的二分題目可能題目正解不是二分是單調佇列,而這題呢 我之前一直被幾組陣列卡到懷疑人生,01數規劃嘛就是讓a i mid,然後加起來如果 0那麼就滿足條件,然後我就想著長度為m的一定是最大的,但是資料教我做人,等下看 就知道了。include include i...
JZOJ4256 平均數 二分
給出包含乙個n n個整數的陣列a a。找出一段長度至少為m m的連續序列,最大化它的平均值。很明顯這道題的答案滿足單調性。若可以找出一段區間的平均值超過k k,那麼必然可以找到一段區間的平均值超過k 1 k 1。那麼可以考慮二分答案。設二分的答案為ans ans若 ij a i j i ans j ...
平均數 題解 二分 求逆序對
有一天,小a得到了乙個長度為n的序列。他把這個序列的所有連續子串行都列了出來,並對每乙個子串行都求了其平均值,然後他把這些平均值寫在紙上,並對它們進行排序,最後他報出了第k小的平均值。你要做的就是模仿他的過程。第一行兩個整數n,k,意義如題中所述。第二行n個正整數,即為小a得到的序列。一行乙個實數,...