[jzoj 6087] [GDOI2019模拟2019.3.26] 获取名额 解题报告 (泰勒展开+RMQ+精度)
题目链接:
https://jzoj.net/senior/#main/show/6087
题目:



题解:
- 只需要统计$\prod_{i=l}^r (1-\frac{a_i}{x})$
- =$exp(\sum_{i=l}^r ln(1-\frac{a_i}{x}))(x>a_i)$
- 我们可以把$ln(1-x)|x<1|$泰勒展开,得到$-\sum_{i=1}^{∞}\frac{x^i}{i}=0-\frac{x}{1}-\frac{x^2}{2}-\frac{x^3}{3}-...$
- 那么里面化简得到$-\sum_{i=1}^{r} \sum_{j=1}^∞\frac{a_i^j}{x^j*j})=-\sum_{i=1}^∞\frac{1}{i*x^i}\sum_{j=l}^{r}a_j^i$
- 实测$∞$取$50$就可以,预处理前缀和来快速计算$\sum_{j=l}^{r}a_j^i$
- 注意把$x=x/max(a_i)$,$a_i=a_i/max(a_i)$,防止爆$double$的范围
- 但是发现精度会有很大问题
- 当$\frac{a_i}{x}$较大时,$ln$里面的东西会比较接近$0$,很难保证精度
- 为$\frac{a_i}{x}$设置一个$lim$,当$\frac{a_i}{x}>lim$时直接算,再递归左右区间
- $lim$取$0.5$是可以过的
- 寻找区间内最大的$\frac{a_i}{x}$用$RMQ$
- 参考自大米饼大佬的博客
代码:
#include<bits/stdc++.h>
using namespace std;
typedef double db; const int N=6e5+;
const int M=;
int n,q;
int bin[],lg[N],f[N][];
db res;
db a[N],s[M+][N];
inline char gc()
{
static char*p1,*p2,s[];
if(p1==p2)p2=(p1=s)+fread(s,,,stdin);
return(p1==p2)?EOF:*p1++;
}
inline int read()
{
char ch=gc();int s=;
while (ch<''||ch>'') ch=gc();
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=gc();}
return s;
}
int Max(int x,int y) {return a[x]>a[y]?x:y;}
void pre()
{
for (int i=bin[]=;i<=;bin[i]=bin[i-]<<,i++);
lg[]=-;
for (int i=;i<=n;i++) f[i][]=i,lg[i]=lg[i>>]+;
for (int i=;i<=;i++)
for (int j=;j+bin[i]-<=n;j++)
f[j][i]=Max(f[j][i-],f[j+bin[i-]][i-]);
}
int ask(int l,int r)
{
int t=lg[r-l+];
return Max(f[l][t],f[r-bin[t]+][t]);
}
db x;
db cal(int l,int r)
{
db re=,t=;
for (int i=;i<=M;i++)
{
t*=x;
re-=(s[i][r]-s[i][l-])/(i*t);
}
return exp(re);
}
void solve(int l,int r)
{
int mid=ask(l,r);
if (a[mid]/x<0.5) {res*=cal(l,r);return;}
res*=-a[mid]/x;
if (l<mid) solve(l,mid-);
if (r>mid) solve(mid+,r);
}
int main()
{
freopen("orz.in","r",stdin);
freopen("orz.out","w",stdout);
n=read();q=read();
db mx=;
for (int i=;i<=n;i++) a[i]=read(),mx=max(mx,a[i]);
for (int i=;i<=n;i++) a[i]/=mx;
pre();
for (int i=;i<=n;i++)
{
db t=;
for (int j=;j<=M;j++)
{
t*=a[i];
s[j][i]=s[j][i-]+t;
}
}
while (q--)
{
int l=read(),r=read();
x=read()/mx;
res=;solve(l,r);
printf("%.10f\n",-res);
}
return ;
}
[jzoj 6087] [GDOI2019模拟2019.3.26] 获取名额 解题报告 (泰勒展开+RMQ+精度)的更多相关文章
- [jzoj 6086] [GDOI2019模拟2019.3.26] 动态半平面交 解题报告 (set+线段树)
题目链接: https://jzoj.net/senior/#main/show/6086 题目: 题解: 一群数字的最小公倍数就是对它们质因数集合中的每个质因数的指数取$max$然后相乘 这样的子树 ...
- [jzoj 4528] [GDOI2019模拟2019.3.26] 要换换名字 (最大权闭合子图)
题目链接: https://jzoj.net/senior/#contest/show/2683/0 题目: 题解: 不妨枚举一个点,让两颗树都以这个点为根,求联通块要么点数为$0$,要么包括根(即联 ...
- [jzoj 6101] [GDOI2019模拟2019.4.2] Path 解题报告 (期望)
题目链接: https://jzoj.net/senior/#main/show/6101 题目: 题解: 设$f_i$表示从节点$i$到节点$n$的期望时间,$f_n=0$ 最优策略就是如果从$i, ...
- [jzoj 6093] [GDOI2019模拟2019.3.30] 星辰大海 解题报告 (半平面交)
题目链接: https://jzoj.net/senior/#contest/show/2686/2 题目: 题解: 说实话这题调试差不多花了我十小时,不过总算借着这道题大概了解了计算几何的基础知识 ...
- [jzoj 6080] [GDOI2019模拟2019.3.23] IOer 解题报告 (数学构造)
题目链接: https://jzoj.net/senior/#main/show/6080 题目: 题意: 给定$n,m,u,v$ 设$t_i=ui+v$ 求$\sum_{k_1+k_2+...+k_ ...
- [jzoj 6092] [GDOI2019模拟2019.3.30] 附耳而至 解题报告 (平面图转对偶图+最小割)
题目链接: https://jzoj.net/senior/#main/show/6092 题目: 知识点--平面图转对偶图 在求最小割的时候,我们可以把平面图转为对偶图,用最短路来求最小割,这样会比 ...
- [jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)
题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 注: ...
- [jzoj 5926] [NOIP2018模拟10.25] naive 的图 解题报告(kruskal重构树+二维数点)
题目链接: https://jzoj.net/senior/#main/show/5926 题目: 题解: 显然最小的最大路径在最小生成树上(最小生成树=最小瓶颈生成树) 于是我们建出kruskal重 ...
- [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)
题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...
随机推荐
- c11---位运算相关
// // main.c // 03-原码反码补码 #include <stdio.h> int main(int argc, const char * argv[]) { // int占 ...
- 使用CNN做电影评论的负面检测——本质上感觉和ngram或者LSTM同,因为CNN里图像检测卷积一般是3x3,而文本分类的话是直接是一维的3、4、5
代码如下: from __future__ import division, print_function, absolute_import import tensorflow as tf impor ...
- Anaconda安装及PyCharm环境配置
1. Anaconda下载 Anaconda 官方下载链接: https://www.continuum.io/downloads 根据自己的系统选择下载32位还是64位. 2. 进入下载目录 如果没 ...
- NEU2016年一月月赛回顾
月赛传送门 http://acm.neu.edu.cn/hustoj/contest.php?cid=1066 月赛已经结束十天了...才把题目补完真是大失误... 茅巨巨四天前就补完了,,,总结写得 ...
- Java-MyBatis:MyBatis 3 动态 SQL
ylbtech-Java-MyBatis:MyBatis 3 动态 SQL 1.返回顶部 1. 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架 ...
- apache配置httpd.conf的webapp根目录(基于appserv服务)
只要修改httpd.conf中两个配置项的值即可: DocumentRoot "E:/workspacePHP/what" <Directory "E:/works ...
- Python学习网络爬虫--转
原文地址:https://github.com/lining0806/PythonSpiderNotes Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scra ...
- 敬请关注 Linr 公众号
- PHP函数十进制、二进制、八进制和十六进制转换函数说明
1.十进制转二进制 decbin() 函数,如下实例 echo decbin(12); //输出 1100 echo decbin(26); //输出 11010 2.十进制转八进制 decoct( ...
- 转:Hibernate使用SQLQuery
原文:http://hi.baidu.com/luo_qing_long/blog/item/783a15eceb75abdd2f2e21b0.html 对原生SQL查询执行的控制是通过SQLQuer ...