设\(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. postgresql-distinct on理解

    PostgreSQL 的 distinct on 的理解 对于 select distinct on , 可以利用下面的例子来理解: create table a6(id integer, name ...

  2. typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 集成 koa

    接上文 1.安装 koa yarn add koa koa-router koa-static yarn add @types/koa @types/koa-router @types/koa-sta ...

  3. WebDriver高级应用实例(10)

    10.1控制HTML5语言实现的视频播放器 目的:能够获取html5语言实现的视频播放器视频文件的地址.时长.控制进行播放暂停 被测网页的网址: http://www.w3school.com.cn/ ...

  4. odoo开发基础--模型之基本字段类型

    定义模型的时候,和python的其他框架类似,可以对比Django,同样是一个模型即:一个class对应生成数据库中的一张表, 只是odoo的继承机制比较复杂一点,在日常的开发中,定义模型的时候, 基 ...

  5. Oracle 获取本周、本月、本季、本年的第一天和最后一天

    Oracle 获取本周.本月.本季.本年的第一天和最后一天 --本周 select trunc(sysdate, 'd') + 1 from dual; select trunc(sysdate, ' ...

  6. Web API 2 对于 Content-Length 要求严格

    最近在做一个工具,里面有一个发起http请求的操作,虽然工具不是用.NET写的,但是测试用服务器软件是.NET写的.在这里选择了ASP.NET MVC和Web API 2. 首先预定义Student与 ...

  7. crontab命令使用文档.txt

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  8. sparkshell运行sql报错: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    下载msyql的连接driver https://download.csdn.net/download/xz360717118/10662304 把其中一个: mysql-connector-java ...

  9. RandomStringUtils工具类

    //产生5位长度的随机字符串,中文环境下是乱码 RandomStringUtils.random(5); //使用指定的字符生成5位长度的随机字符串 RandomStringUtils.random( ...

  10. js 键盘事件

    <script type="text/javascript" language=JavaScript charset="UTF-8"> docume ...