P1471 方差
题目
思路
\]
\]
\]
那就是维护区间和和区间平方和平方和很好维护吧
代码
#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 方差的更多相关文章
- 洛谷 P1471 方差
洛谷 P1471 方差 题目背景 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的 ...
- 【洛谷】【线段树】P1471 方差
[题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...
- 洛谷——P1471 方差
P1471 方差 题目描述 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. 借一下远航之曲大佬的图片,特别清晰: 那么只要维护区间平方和,就可以 ...
- 洛谷P1471 方差
蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. ——by 洛谷; http://www.luogu.org/problem/show?pid=1 ...
- 2018.08.16 洛谷P1471 方差(线段树)
传送门 线段树基本操作. 把那个方差的式子拆开可以发现只用维护一个区间平方和和区间和就可以完成所有操作. 同样区间修改也可以简单的操作. 代码: #include<bits/stdc++.h&g ...
- Luogu P1471 方差
题目传送门 开了十倍空间才过是什么鬼?该不会我线段树炸了吧-- 细思极恐 平均数都会求,维护区间和,到时候除一下就好了. 方差的求法如下 (用的Luogu的图片) 因为要维护一个平方,我们可以考虑使用 ...
- 【题解】Luogu P1471 方差
原题传送门 简单进行推导之后,就能发现很妙的结论 用线段树维护区间和,区间平方和就珂以算出结果 #include <bits/stdc++.h> #define db double #de ...
- Luogu P1471 方差 线段树
那是上上周...也是重构了四遍...后来GG了...今天又拾起,搞了搞终于过了... 好吧就是个线段树,公式懒得推了https://www.cnblogs.com/Jackpei/p/10693561 ...
- 【luogu P1471】方差
https://www.luogu.org/problem/show?pid=1471 一眼就能看出是线段树/树状数组题目了. 求平均不用说,线段树/树状数组维护区间和即可. 方差怎么求?先变换下方差 ...
随机推荐
- Python开发【笔记】:什么是RESTful框架
RESTful框架 前言: 一句话总结:用URL定位资源,用HTTP描述操作 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- rem布局,flexible.js
//author:caibaojian //website:http://caibaojian.com //weibo:http:weibo.com/kujian //这段js的最后面有两个参数记得要 ...
- Django的调试方法
web程序调试起来和桌面程序有着很大的差别,对于Django程序来说调试更是个问题.我们可以用postman发送http请求,下面就介绍几种调试方法: 1.在Eclipse+Pydev中调试Djang ...
- KVM VHOST中irqfd的使用
2018-01-18 其实在之前的文章中已经简要介绍了VHOST中通过irqfd通知guest,但是并没有对irqfd的具体工作机制做深入分析,本节简要对irqfd的工作机制分析下.这里暂且不讨论具体 ...
- 代码这样写更优雅(Python版)
要写出 Pythonic(优雅的.地道的.整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,笔者列举一些常见 ...
- 10 jmeter之动态关联
jmeter中关联是通过之前请求的后置处理器实现的,具体有两种方式:XPath Extractor(一般xml的时候用的多)和正则表达式提取器. 以webtours登录为例进行演示login.jmx ...
- ArrayList序列化
ArrayList源代码中的 private transient E[] elementData; 声明为transient,为什么还可以序列化成功呢? ArrayList重写了 private vo ...
- wprintf或_tprintf不显示中文和乱码问题
1.由于中文问题,宽字节编译时会遇到一些不显示或显示乱码问题 如下列代码: 分别是WIN API写入和读取文件,测试_tprintf就会不显示 #include "stdafx.h&quo ...
- MFC六大核心机制之三:动态创建
MFC中很多地方都使用了动态创建技术.动态创建就是在程序运行时创建指定类的对象.例如MFC的单文档程序中,文档模板类的对象就动态创建了框架窗口对象.文档对象和视图对象.动态创建技术对于希望了解MFC底 ...
- Java面向对象---接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口 ...