【JZOJ 6087】【GDOI2019模擬2019.3.26】獲取名額

Description

在這裏插入圖片描述

n,q6105,max{ai}109ans106n,q\leq 6*10^5,\max\{a_i\}\leq 10^9,ans精度要求小於10^{-6}

Solution

min{ai}x\min\{a_i\}\leq x時,ans恆爲1,
剩下的顯然的有:
Ansi=1(1aix)Ans_i=1-\prod (1-\frac{a_i}{x})

考慮取對數後泰勒展開,
ln(1aix)=j=1aijjxj\ln(1-\frac{a_i}{x})=-\sum_{j=1}\frac{a_i^j}{j*x^j}

這樣就可以對一個區間一起處理了,預處理前幾項即可,

然而這樣精度可能還有點不夠,考慮進一步提升精度

定義閾值LILI,
對於aixLI\frac{a_i}{x}\geq LI的位置,特殊提出來處理,因爲就是這樣的位置導致精度不夠的,
原因:恆有aix<1\frac{a_i}{x}<1,隨着次數j的增加,(aix)j(\frac{a_i}{x})^j是衰減的,當aix\frac{a_i}{x}較大時,它的衰減的很慢,也就是出現精度不夠情況了,

LI=0.5LI=0.5就差不多了,
可以證明,這樣的位置沒有很多,因爲aix\frac{a_i}{x}較大意味着1aix1-\frac{a_i}{x}較小,所以如果很多的話很快就衰減到精度以下了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章