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 一眼就能看出是线段树/树状数组题目了. 求平均不用说,线段树/树状数组维护区间和即可. 方差怎么求?先变换下方差 ...
随机推荐
- 网站优化(SEO)的10大误区
前段时间大前端也有关于SEO的文章贡献给广大读者,今日,再发一文,网站优化(SEO)的10大误区.很多新手站长初次接触SEO,感受到SEO 的无穷魅力,想要做一位优秀的SEOer,然而新手朋友在进行S ...
- Best Cow Line---poj3617(贪心)
题目链接:http://poj.org/problem?id=3617 题意:有n头牛.刚开始有一个序列.现在想要重新排列.每次从原始的序列头部和尾部取出一个取出一个放到新的序列尾部.最后使得得到的新 ...
- 洛谷P2577 [ZJOI2005]午餐 dp
正解:序列dp 解题报告: 传送门! 这题首先要想到一个显然的贪心:每个窗口的排队顺序都是按照吃饭时间从大到小排序的 证明如下: 这种贪心通常都是用微扰法,这题也不例外 现在假如已经确定了每个窗口有哪 ...
- 洛谷P5021 赛道修建 NOIp2018 贪心+二分答案
正解:贪心+LCA+二分答案 解题报告: 想先港下部分分qwq因为我部分分只拿到了10ptsQAQ(时间不够不是理由,其实还是太弱,所以要想很久,所以才时间不够QAQ m=1 找直径长度,完 一条链 ...
- CentOS代理设置
1.全局的代理设置: vi /etc/profile 添加下面内容 http_proxy = http://username:password@yourproxy:8080/ftp_proxy = h ...
- express 默认模板引擎
使用express -t ejs microblog创建出来的居然不是ejs项目,而是jade项目.现在的版本已经没有-t这个命令了,改为express -e microblog.运行完之后,根据提示 ...
- JS闭包中的循环绑定处理程序
前几天工作中写前端js代码时,遇到了遍历元素给它添加单击事件.就是这个问题让我整整调了一个下午.最后还是下班回家,上网查资料才知道怎么解决的. (PS:之前也在<jQuery基础教程>第四 ...
- git使用简单指南
参考: https://www.fengerzh.com/git-reset/?utm_source=tool.lu git建库小结 (一)远端:1.在git网站上建设一个远程仓库复制git远程仓库地 ...
- 如何实现在H5里调起高德地图APP?
http://www.cnblogs.com/milkmap/p/5912350.html 这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前 ...
- Scala系统学习(三):Scala基础语法
如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...