CF712E|CF712E Memory and Casinos
设\(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'>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
【CF712E|CF712E Memory and Casinos】转载于:https://www.cnblogs.com/AH2002/p/10297729.html
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- Eddy小文
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- EditText默认不获取焦点弹出键盘