题目

luogu

思路

\[\frac{1}{n}*\sum_{1}^{n}( a_{i}-A)^{2}
\]

\[\frac{1}{n}*\sum_{1}^{n}( a_{i}^2-2*A*a_{i}+A^2)
\]

\[\frac{1}{n}*(\sum_{1}^{n} a_{i}^{2}-2*A\sum_{1}^{n} a_{i})+A^{2}
\]

那就是维护区间和和区间平方和平方和很好维护吧

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#define ls rt<<1
#define rs rt<<1|1
#define ll long long
using namespace std;
const int maxn = 1e5 + 7;
struct node {
int l, r;
double tot, lazy, pfh;
} e[maxn << 2];
int n, m;
double ans1, ans2;
void pushup(int rt) {
e[rt].tot = e[ls].tot + e[rs].tot;
e[rt].pfh = e[ls].pfh + e[rs].pfh;
}
void pushdown(int rt) {
if (e[rt].lazy)
{
e[ls].pfh += 2 * e[rt].lazy * e[ls].tot + (e[ls].r - e[ls].l + 1) * e[rt].lazy * e[rt].lazy;
e[rs].pfh += 2 * e[rt].lazy * e[rs].tot + (e[rs].r - e[rs].l + 1) * e[rt].lazy * e[rt].lazy;
e[ls].tot += (e[ls].r - e[ls].l + 1) * e[rt].lazy;
e[rs].tot += (e[rs].r - e[rs].l + 1) * e[rt].lazy;
e[ls].lazy += e[rt].lazy;
e[rs].lazy += e[rt].lazy;
e[rt].lazy = 0;
}
}
void build(int l, int r, int rt) {
e[rt].l = l, e[rt].r = r;
if (l == r) {
scanf("%lf", &e[rt].tot);
e[rt].pfh = e[rt].tot * e[rt].tot;
return;
}
int m = (l + r) >> 1;
build(l, m, ls);
build(m + 1, r, rs);
pushup(rt);
}
void modify(int L, int R, double x, int rt) {
if (L <= e[rt].l && e[rt].r <= R) {
e[rt].pfh += 2 * x * e[rt].tot + x * x * (e[rt].r - e[rt].l + 1);
e[rt].tot += (e[rt].r - e[rt].l + 1) * x;
e[rt].lazy += x;
return;
}
pushdown(rt);
int m = (e[rt].l + e[rt].r) >> 1;
if (L <= m) modify(L, R, x, ls);
if (R > m) modify(L, R, x, rs);
pushup(rt);
}
void query(int L, int R, int rt) {
if (L <= e[rt].l && e[rt].r <= R) {
ans1 += e[rt].tot;
ans2 += e[rt].pfh;
return;
}
pushdown(rt);
int m = (e[rt].l + e[rt].r) >> 1;
if (L <= m) query(L, R, ls);
if (R > m) query(L, R, rs);
pushup(rt);
} int main() {
scanf("%d%d", &n, &m);
build(1, n, 1);
while (m--) {
int opt, a, b;
double x;
scanf("%d", &opt);
if (opt == 1) {
scanf("%d%d%lf", &a, &b, &x);
modify(a, b, x, 1);
}
if (opt == 2) {
scanf("%d%d", &a, &b);
ans1 = ans2 = 0;
query(a, b, 1);
printf("%.4lf\n", ans1 / (b - a + 1));
}
if (opt == 3) {
scanf("%d%d", &a, &b);
ans1 = ans2 = 0;
query(a, b, 1);
double tmp = ans1 / (b - a + 1);
printf("%.4lf\n", tmp * tmp + (ans2 - 2.0 * tmp * ans1) / (b - a + 1));
}
}
return 0;
}

P1471 方差的更多相关文章

  1. 洛谷 P1471 方差

    洛谷 P1471 方差 题目背景 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的 ...

  2. 【洛谷】【线段树】P1471 方差

    [题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...

  3. 洛谷——P1471 方差

    P1471 方差 题目描述 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. 借一下远航之曲大佬的图片,特别清晰: 那么只要维护区间平方和,就可以 ...

  4. 洛谷P1471 方差

    蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. ——by 洛谷; http://www.luogu.org/problem/show?pid=1 ...

  5. 2018.08.16 洛谷P1471 方差(线段树)

    传送门 线段树基本操作. 把那个方差的式子拆开可以发现只用维护一个区间平方和和区间和就可以完成所有操作. 同样区间修改也可以简单的操作. 代码: #include<bits/stdc++.h&g ...

  6. Luogu P1471 方差

    题目传送门 开了十倍空间才过是什么鬼?该不会我线段树炸了吧-- 细思极恐 平均数都会求,维护区间和,到时候除一下就好了. 方差的求法如下 (用的Luogu的图片) 因为要维护一个平方,我们可以考虑使用 ...

  7. 【题解】Luogu P1471 方差

    原题传送门 简单进行推导之后,就能发现很妙的结论 用线段树维护区间和,区间平方和就珂以算出结果 #include <bits/stdc++.h> #define db double #de ...

  8. Luogu P1471 方差 线段树

    那是上上周...也是重构了四遍...后来GG了...今天又拾起,搞了搞终于过了... 好吧就是个线段树,公式懒得推了https://www.cnblogs.com/Jackpei/p/10693561 ...

  9. 【luogu P1471】方差

    https://www.luogu.org/problem/show?pid=1471 一眼就能看出是线段树/树状数组题目了. 求平均不用说,线段树/树状数组维护区间和即可. 方差怎么求?先变换下方差 ...

随机推荐

  1. A Bug's Life-----poj2492(关系并查集)

    题目链接:http://poj.org/problem?id=2492 题意是问是否存在同性恋, 就是a喜欢b,b喜欢c,a又喜欢c,所以就有同性恋了: #include<stdio.h> ...

  2. 【爬坑】python3+pyqt5+pyinstaller 打包成exe的各种问题

    windows系统+python3+pyqt5+pyinstaller打包,经常会出现各种打包异常情况.如果代码没有特别异常,那么综合原因,大抵都是这四个元素之间的匹配问题,引起的.作者:一心狮链接: ...

  3. kubernetes实战(十六):k8s高可用集群平滑升级 v1.11.x 到v1.12.x

    1.基本概念 升级之后所有的containers会重启,因为hash值会变. 不可跨版本升级. 2.升级Master节点 当前版本 [root@k8s-master01 ~]# kubeadm ver ...

  4. Infopath表单&Reproting Service在IE11下问题解决

    一.打开表单出现错误:“对象不支持“addEventListener”属性或方法”错误 解决方法: 1. IE11浏览器--->选项 2. 勾选"在兼容性视图中显示intranet站点 ...

  5. SQLCE数据工具(Flyhoward Ltd SDF Viewer)

    SDF Viewer sdf数据库创建编辑查看 官方下载地址  http://www.flyhoward.com/Download_SDF_Viewer.aspx 用户名:www.cr173.com注 ...

  6. 64位win10+cuda8.0+vs2013+cuDNN V5下Caffe的编译安装教程并配置matlab2014a 接口

    一.需要安装的软件 1)vs2013,我是在http://www.52pojie.cn/thread-492326-1-1.html这个网址安装的.我之前用的是vs2012,按照网上的配置教程会爆各种 ...

  7. Centos expect spawn、linux expect 用法

    使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理.  脚本代码如下:  ###### ...

  8. libSVM简介及核函数模型选择

    1. libSVM简介 训练模型的结构体 struct svm_problem //储存参加计算的所有样本 { int l; //记录样本总数 double *y; //指向样本类别的组数 struc ...

  9. vue.js使用typescript踩坑记

    最近在把https://github.com/renrenio/renren-fast-vue这个项目转为typescript,在此记录一下遇到的小坑 name坑:属性该怎么给? 声明文件坑:如何解决 ...

  10. iOS 网易彩票-3常见设置

    Navigation导航设置 为了统一管理导航控制器,需要自定义导航控制器MJNavigationController,继承于UINavigationController.分别设置5个Navigati ...