设\(f[i]\)为从\(i\)到\(r+1\)且不走出区间的概率

\(f[i]=p[i]f[i+1]+(1-p[i])f[i-1]\)

\(f[i]-f[i-1]=p[i](f[i+1]-f[i-1])\)

\(f[r+1]=1,f[l-1]=0\)

\(g[i]=f[i]-f[i-1]\)

\(g[i]=p[i](g[i+1]+g[i])\)

\(g[i+1]=\frac{1-p[i]}{p[i]} g[i]\)

\(\sum_{i=l}^{r+1} g[i]=f[r+1]-f[l-1]=1\)

\(lis[l][r]=\sum_{i=l}^{r} \prod_{j=l}^i \frac{1-p[j]}{p[j]}\)

\(f[l]=g[l]=\frac{1}{lis[l][r]+1}\)

线段树维护前缀积、前缀和即可

#include"cstdio"
#include"cstring"
#include"iostream"
#include"algorithm"
using namespace std; const int MAXN=1<<17; int n,m;
int ik[MAXN];
double sum[2][MAXN<<1];
struct rpg{double a,b;}; int read()
{
int x=0;char ch=getchar();
while(ch<'0'||'9'<ch) ch=getchar();
while('0'<=ch&&ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x;
} void build(int k,int l,int r)
{
if(l==r){ik[l]=k;return;}
int i=k<<1,mid=l+r>>1;
build(i,l,mid),build(i|1,mid+1,r);
return;
} void cchg(int k,double v)
{
sum[0][k]=sum[1][k]=v;k>>=1;
while(k){
int i=k<<1;
sum[0][k]=sum[0][i]*sum[0][i|1];
sum[1][k]=sum[1][i]+sum[0][i]*sum[1][i|1];
k>>=1;
}return;
} rpg cask(int k,int l,int r,int le,int ri)
{
if(le<=l&&r<=ri) return (rpg){sum[0][k],sum[1][k]};
int i=k<<1,mid=l+r>>1;
if(le<=mid&&mid<ri){
rpg sum=cask(i,l,mid,le,ri),tmp=cask(i|1,mid+1,r,le,ri);
sum.b+=sum.a*tmp.b;
sum.a*=tmp.a;
return sum;
}if(le<=mid) return cask(i,l,mid,le,ri);
return cask(i|1,mid+1,r,le,ri);
} int main()
{
n=read();m=read();
build(1,1,n);
for(int i=1;i<=n;++i){
int a=read(),b=read();
double f=1.0*a/b;
cchg(ik[i],(1.0-f)/f);
}while(m--){
int p=read();
if(p==1){int k=read(),a=read(),b=read();double f=1.0*a/b;cchg(ik[k],(1.0-f)/f);}
else{int l=read(),r=read();printf("%.10lf\n",1.0/(cask(1,1,n,l,r).b+1));}
}return 0;
}

CF712E Memory and Casinos的更多相关文章

  1. CF712E Memory and Casinos 期望概率

    题意:\(n\)个赌场,每个赌场有\(p_{i}\)的胜率,如果赢了就走到下一个赌场,输了就退回上一个赌场,规定\(1\)号赌场的上一个是\(0\)号赌场,\(n\)号赌场的下一个是\(n + 1\) ...

  2. Codeforces Round #370 (Div. 2) E. Memory and Casinos 线段树

    E. Memory and Casinos 题目连接: http://codeforces.com/contest/712/problem/E Description There are n casi ...

  3. 「CF712E」Memory and Casinos「线段树」「概率」

    题解 解法1:(官方做法) 一段区间的\(L\)定义为从最左边开始出发,最左不失败,一直到最右边胜利的概率,\(R\)定义为从最右边开始出发,最左不失败,又回到最右边胜利的概率 考虑一个区间\([l, ...

  4. 【CF712E】Memory and Casinos(数学 期望 DP)

    题目链接 大意 给出一个序列,当你在某个点时,有一个向右走的概率\(P_i\)(向左为\(1-P_i\)), 给出\(M\)个操作,操作有两类: 1 X Y Z:把\(P_X\)的值修改为\(\fra ...

  5. Codeforces 712E Memory and Casinos

    Description There are n casinos lined in a row. If Memory plays at casino \(i\), he has probability ...

  6. cf 712E Memory and Casinos

    题意:有一行$n(n \leq 100000)$个方格,从左往右第$i$个方格的值为$p_i(p_i = \frac{a}{b}, 1 \leq a < b \leq 1e9)$,有两种操作,一 ...

  7. Codeforces Round #370 (Div. 2) E. Memory and Casinos (数学&&概率&&线段树)

    题目链接: http://codeforces.com/contest/712/problem/E 题目大意: 一条直线上有n格,在第i格有pi的可能性向右走一格,1-pi的可能性向左走一格,有2中操 ...

  8. CF712E [Memort and Casinos]

    题意 每次询问一段区间[l,r],求从最左边走到最右边(r+1)的概率(若走到l-1,则GG了),每个点上写有向右走的概率.支持单点修改. 思考 若只查询一次,那只要知道每个点在不走到l-1的情况下, ...

  9. Memory and Casinos CodeForces - 712E (概率,线段树)

    题目链接 题目大意:$n$个点, 每个点$i$有成功率$p_i$, 若成功走到$i+1$, 否则走到走到$i-1$, 多组询问, 求从$l$出发, 在$l$处不失败, 最后在$r$处胜利的概率 设$L ...

随机推荐

  1. flask框架1

    说flask框架之前,必须得提一下web框架,他的作用是为了利用互联网交流工作文档,我们为什么要使用框架,因为框架的稳定性和可扩展性强并且可以降低开发难度,提高开发效率.总的来说就是避免做无用功,重复 ...

  2. php5.3新垃圾回收机制详解

    php的垃圾回收机制主要参考了http://blog.csdn.net/phpkernel/article/details/5734743 这文章. 变量对应的值,比如 $a="abc&qu ...

  3. POJ 2546

    #include<iostream> #include<numeric> #include<iomanip> #include<algorithm> # ...

  4. HuLu机器学习问题与解答系列(1-8)

    声明:本系列文章转载自微信公众号HULU,本人只是搬运工,仅供学习,如有不妥,后续告知删除. 嗨,欢迎回来,希望你能保持定期回顾的好习惯噢!下面是Hulu机器学习问题与解答系列的前8篇内容,点击主题名 ...

  5. Git使用(1)

    安装git完成后 1.首先配置你的用户信息,用于体现在你的提交记录中包含your name and your email git config --global user.name "you ...

  6. ASP.NET Core 1.0 基础与应用启动

    .NET Core http://dotnet.github.io/[https://github.com/dotnet/coreclr] ASP.NET Core 1.0 https://get.a ...

  7. Windows下的Jdk 1.8*安装并配置(图文详解)

    不多说,直接上干货! 简单说下,jdk1.8*的下载,见http://www.cnblogs.com/zlslch/p/5658383.html 双击jdk-8u60-windows-x64.exe运 ...

  8. 修改wireshark协议解析规则

    不同的协议有不同的解码器,wireshark尝试为每个包尝试找到正确的解码器,特定的情况有可能会选择错误的解码器. 1.使用了其它协议的标准端口,被错误解码,使用udp的80端口发送数据被当作QUIC ...

  9. Python模块: 文件和目录os+shutil

    一 常用函数 os模块 os.sep 表示默认的文件路径分隔符,windows为\, linux为/os.walk(spath): 用来遍历目录下的文件和子目录os.listdir(dirname): ...

  10. linux----之tcpdump小用

    1.通过抓包大致确定访问量 #time tcpdump -nn -i eth0 'tcp[tcpflags] = tcp-syn' -c 10000 >/dev/null 根据real时间判断访 ...