CF895E Eyes Closed (期望)
题目链接
利用期望的线性性质:
\(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 (期望)的更多相关文章
- [CF895E] Eyes Closed(线段树,期望)
		
Desctiption 传送门:Portal 大致题意: 给你一个序列, 支持两种操作: 1 l1 r1 l2 y2 在\([l1, r1]\)随机选择一个数a, \([l2, r2]\) 内随机选择 ...
 - [CF895E]Eyes Closed
		
luogu description 一个序列\(a_i\),支持一下两种操作. \(1\ \ l_1\ \ r_1\ \ l_2\ \ r_2\): 随机交换区间\([l_1,r_1]\)和\([l_ ...
 - CF895 E. Eyes Closed(线段树 期望)
		
题意 Sol 今天考试的T3,,我本来留了一个小时去写.但是T2一刚就刚了两个小时 最后也没来的及写.. 然后考完 开始写,,25min就A了.. 感觉自己太高估自己的思维,太低估自己的码力了... ...
 - codeforces895E. Eyes Closed
		
题目链接 codeforces895E. Eyes Closed 题解 线段树维护期望和 写出修改两区间的相互影响 就是一个区间修改 emmm考试的代码过不去,这么松的spj都过不去Orz,每次和答案 ...
 - Codeforces 895.E Eyes Closed
		
E. Eyes Closed time limit per test 2.5 seconds memory limit per test 256 megabytes input standard in ...
 - Codeforces 895E Eyes Closed(线段树)
		
题目链接 Eyes Closed 题意 两个人玩一个游戏,现在有两种操作: 1.两个人格子挑选一个区间,保证两个的区间不相交.在这两个区间里面各选出一个数,交换这两个数. 2.挑选一个区间,求这个 ...
 - 懒加载session 无法打开 no session or session was closed  解决办法(完美解决)
		
首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...
 - 4.Android 打包时出现的Android Export aborted because fatal error were founds [closed]
		
Android 程序开发完成后,如果要发布到互联网上供别人使用,就需要将自己的程序打包成Android 安装包文件(Android Package,APK),其扩展名为.apk.使用run as 也能 ...
 - 【BZOJ-3143】游走     高斯消元 + 概率期望
		
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
 
随机推荐
- Node.js 自定义模块
			
Node.js内置多个模块,也可以使用第三方模块,今天学习一下如何使用自己定义的模块 在同级目录下定义两个js文件 第一个:custom1.js "use strict"; fun ...
 - 密码破解工具John the Ripper使用说明
			
John the Ripper John 包描述 John the Ripper 既功能丰富又运行快速. 它在一个程序中结合了几种破解模式,并且可以根据您的特定需求进行全面地配置(你甚至可以使用支持C ...
 - PyInstaller 库
			
将.py 源代码转换成无需源代码的可执行文件 首先,PyInstaller是第三方库,需要下载额外安装(安装第三方库需要使用pip工具) 步骤: 1.用管理员运行cmd命令行 "pip in ...
 - UWP 版本号
			
一:版本号 个人开发者对于版本号的命名相对随便一点,如果是大公司的话,命名则要规范一点.以开发UWP为例 在创建包的时候,开发者可以自定义版本号或者点击自动增加. 二:对应上图中的四个格子中的数字 第 ...
 - Codeforces Round #547 (Div. 3) A.Game 23
			
链接:https://codeforces.com/contest/1141/problem/A 题意: 给n和m,有两种操作:将n×2 或 n×3,求最少的乘法次数由n得到m. 不能得到时为-1. ...
 - GYM 101673G(dp)
			
dp[i][j][0/1]:第i天处于第j状态要不要吃. const int maxn = 1e2 + 5; int n, a[maxn], b[maxn]; int dp[maxn][maxn][2 ...
 - ubuntu管理apt包的常用命令
			
安装 apt-get install nginx #安装 apt-get install nginx --reinstall #重新安装 删除 apt-get remove nginx #卸载 apt ...
 - 转:在linux中vi 文件里行尾奇怪的^M及解决
			
Linux编辑器vim中删除行尾的^M 有时候,在 Linux 中使用打开曾在 Windows 中编辑过的文件时,会在行尾看到 ^M 字符.看起来总是感觉很别扭. 删除方法如下: 在 Vim 的命令模 ...
 - RESTful架构搜集
			
今天才知道RESTful这个词,感觉好落后呀.自从5月份后很少学习新知识,这是个不好的信号. RESTful是Representational State Transfer的缩写.怎么理解Repres ...
 - Linux--NiaoGe-Service-06
			
Linux网络排错 思路: 硬件问题: 首先排除硬件故障,包括网线.Hub.Switch.Router.网卡.设备配置规则等等. 软件问题: 1.网卡的IP/Netmask设置错误 IP.Netmas ...