题目链接

利用期望的线性性质:

\(E(sum) = E(x_l) + E(x_{l+1})+ E(x_{l+2}) +.. E(x_r)\)

然后就考虑对于交换时两个区间元素的改动.

假设这两个区间的长度分别为\(L_1,L_2\),和为\(S_1,S_2\)

那么对于第一个区间元素的期望为.

\(E(x_i) = \dfrac{L_1 - 1}{L_1} * E(x_i) + \dfrac{1}{L_1}*\dfrac{L_2}{S_2}\)

对于第二个区间也是这样.

然后用线段树维护一下就可以了.

#include <iostream>
#include <cstdio>
#define lson now << 1
#define rson now << 1 | 1
const int maxN = 1e5 + 7; struct Node {
int l,r;
double sum,lazy,mul;
}tree[maxN << 2]; inline int read() {
int x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {if(c == '-')f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
} void init(int now,int l,int r) {
tree[now].l = l;tree[now].r = r;
tree[now].mul = 1;tree[now].lazy = 0;
return ;
} void updata(int now) {
tree[now].sum = tree[lson].sum + tree[rson].sum;
return;
} void build(int now,int l,int r) {
init(now,l,r);
if(l == r) {
tree[now].sum = read();
return;
}
int mid = (l + r) >> 1;
build(lson,l,mid);
build(rson,mid + 1,r);
updata(now);
return ;
} void work(int now,double lazy,double mul) {
tree[now].lazy = tree[now].lazy * mul + lazy;
tree[now].mul = tree[now].mul * mul;
tree[now].sum = tree[now].sum * mul + lazy * (tree[now].r - tree[now].l + 1);
return ;
} void pushdown(int now) {
work(lson,tree[now].lazy,tree[now].mul);
work(rson,tree[now].lazy,tree[now].mul);
tree[now].lazy = 0;tree[now].mul = 1;
return ;
} double query(int now,int L,int R) {
if(tree[now].l >= L && tree[now].r <= R) return tree[now].sum;
int mid = (tree[now].l + tree[now].r) >> 1;
double sum = 0;
if(tree[now].lazy || tree[now].mul != 1) pushdown(now);
if(mid >= L) sum += query(lson,L,R);
if(mid < R) sum += query(rson,L,R);
return sum;
} void modify(int now,int L,int R,double lazy,double mul) {
if(tree[now].l >= L && tree[now].r <= R) {
work(now,lazy,mul);
return ;
}
if(tree[now].lazy || tree[now].mul != 1) pushdown(now);
int mid = (tree[now].l + tree[now].r) >> 1;
if(mid >= L) modify(lson,L,R,lazy,mul);
if(mid < R) modify(rson,L,R,lazy,mul);
updata(now);
return ;
} int main() {
int n,m;
n = read();m = read();
build(1,1,n);
int opt,l1,r1,l2,r2;
while(m --) {
opt = read() - 1;l1 = read();r1 = read();
if(!opt) {
l2 = read();r2 = read();
int L_1,L_2;
double S_1,S_2;
L_1 = r1 - l1 + 1;L_2 = r2 - l2 + 1;
S_1 = query(1,l1,r1);S_2 = query(1,l2,r2);
modify(1,l1,r1,1.0 / L_1 * S_2 / L_2,1.0 * (L_1 - 1) / L_1);
modify(1,l2,r2,1.0 / L_2 * S_1 / L_1,1.0 * (L_2 - 1) / L_2);
}
else printf("%.7lf\n",query(1,l1,r1));
}
return 0;
}

CF895E Eyes Closed (期望)的更多相关文章

  1. [CF895E] Eyes Closed(线段树,期望)

    Desctiption 传送门:Portal 大致题意: 给你一个序列, 支持两种操作: 1 l1 r1 l2 y2 在\([l1, r1]\)随机选择一个数a, \([l2, r2]\) 内随机选择 ...

  2. [CF895E]Eyes Closed

    luogu description 一个序列\(a_i\),支持一下两种操作. \(1\ \ l_1\ \ r_1\ \ l_2\ \ r_2\): 随机交换区间\([l_1,r_1]\)和\([l_ ...

  3. CF895 E. Eyes Closed(线段树 期望)

    题意 Sol 今天考试的T3,,我本来留了一个小时去写.但是T2一刚就刚了两个小时 最后也没来的及写.. 然后考完 开始写,,25min就A了.. 感觉自己太高估自己的思维,太低估自己的码力了... ...

  4. codeforces895E. Eyes Closed

    题目链接 codeforces895E. Eyes Closed 题解 线段树维护期望和 写出修改两区间的相互影响 就是一个区间修改 emmm考试的代码过不去,这么松的spj都过不去Orz,每次和答案 ...

  5. Codeforces 895.E Eyes Closed

    E. Eyes Closed time limit per test 2.5 seconds memory limit per test 256 megabytes input standard in ...

  6. Codeforces 895E Eyes Closed(线段树)

    题目链接  Eyes Closed 题意  两个人玩一个游戏,现在有两种操作: 1.两个人格子挑选一个区间,保证两个的区间不相交.在这两个区间里面各选出一个数,交换这两个数. 2.挑选一个区间,求这个 ...

  7. 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)

           首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...

  8. 4.Android 打包时出现的Android Export aborted because fatal error were founds [closed]

    Android 程序开发完成后,如果要发布到互联网上供别人使用,就需要将自己的程序打包成Android 安装包文件(Android Package,APK),其扩展名为.apk.使用run as 也能 ...

  9. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

随机推荐

  1. Source Insight 入门设置

    在添加工程时,如果想添加文件夹下所有的文件,应该选择 “add tree” Source Insight 类名显示乱码解决 最近重新安装里source insight,但是打开文件后,类名显示乱码? ...

  2. Pycharm2018.3.1永久激活

    Pycharm Professional 2018.3.1 版已正式发布,新版本添加对Python3.7的支持.作为强大的开发工具,但每次注册让人头疼,本着分享的心态,提供以下解决方案,亲测有效!本方 ...

  3. mysql_innodb引擎

    innodb概括 1.Innodb是一种事务性存储引擎 2.完全支持事务的ACID特性 3.实现事务特性的原理: 使用Redo Log和Undo Log,Undo Log用于帮助未提交事务进行回滚,R ...

  4. StretchDIBits速度测试(COLORONCOLOR)

    下面是一个测试程序,源码下载

  5. jQuery addClass() 源码解读

    addClass: function( value ) { var classes, elem, cur, clazz, j, i = 0, len = this.length, proceed = ...

  6. 06.Javascript——入门this的用法(难点)

    this 的指向 this 是 js 中定义的关键字,它自动定义于每一个函数域内,但是它的指向却让人很迷惑.在实际应用中,this 的指向大致可以分为以下四种情况. 1.作为普通函数调用 当函数作为一 ...

  7. 将Form以强类型Model提交,后台获取不到的问题

    F.TextBoxFor(m => m.Name) 不能自定ID属性

  8. mongodb sort

    sort() 方法 要在 MongoDB 中的文档进行排序,需要使用sort()方法. sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序.要指定排序顺序1和-1. 1用于升序排列, ...

  9. leetcode134 Gas Station

    思路: https://leetcode.com/problems/gas-station/discuss/269604/Java-Greedy-thought-process 关键是要想清楚如果从加 ...

  10. PeopleSoft FSCM Production Support 案例分析之一重大紧急事故发生时的应对策略

    案例背景: 今天一大早用户打电话来讲昨天上传的银行的forex payment return file好像没有被处理到,我一听就觉得纳闷,因为昨天晚上operator也没有给我打电话啊(如果有job ...