Description
n,q≤6∗105,max{ai}≤109,ans精度要求小于10−6n,q\leq 6*10^5,\max\{a_i\}\leq 10^9,ans精度要求小于10^{-6}n,q≤6∗105,max{ai}≤109,ans精度要求小于10−6
Solution
当min{ai}≤x\min\{a_i\}\leq xmin{ai}≤x时,ans恒为1,
剩下的显然的有:
Ansi=1−∏(1−aix)Ans_i=1-\prod (1-\frac{a_i}{x})Ansi=1−∏(1−xai)
考虑取对数后泰勒展开,
ln(1−aix)=−∑j=1aijj∗xj\ln(1-\frac{a_i}{x})=-\sum_{j=1}\frac{a_i^j}{j*x^j}ln(1−xai)=−j=1∑j∗xjaij
这样就可以对一个区间一起处理了,预处理前几项即可,
然而这样精度可能还有点不够,考虑进一步提升精度:
定义阈值LILILI,
对于aix≥LI\frac{a_i}{x}\geq LIxai≥LI的位置,特殊提出来处理,因为就是这样的位置导致精度不够的,
原因:恒有aix<1\frac{a_i}{x}<1xai<1,随着次数j的增加,(aix)j(\frac{a_i}{x})^j(xai)j是衰减的,当aix\frac{a_i}{x}xai较大时,它的衰减的很慢,也就是出现精度不够情况了,
LI=0.5LI=0.5LI=0.5就差不多了,
可以证明,这样的位置没有很多,因为aix\frac{a_i}{x}xai较大意味着1−aix1-\frac{a_i}{x}1−xai较小,所以如果很多的话很快就衰减到精度以下了