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 一眼就能看出是线段树/树状数组题目了. 求平均不用说,线段树/树状数组维护区间和即可. 方差怎么求?先变换下方差 ...
随机推荐
- java内存区域-方法区
方法区(Method Area)与java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.虽然java虚拟机规范把方法区描述为堆的一个 ...
- 单调栈&单调队列学习笔记!
ummm,,,都是单调系列就都一起学了算了思想应该都差不多呢qwq 其实感觉这俩没有什么可说的鸭QAQ就是维护一个单调的东西,区别在于单调栈是一段进一段出然后单调队列是一段进另一段出?没了 好趴辣重点 ...
- SQL Server 镜像证书过期处理
转自:https://www.cnblogs.com/trams/archive/2012/01/13/2321637.html SQL Server 镜像证书过期处理 今天镜像中的主服务器进行维护重 ...
- Civil and Evil Engineer(普林姆)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=198#problem/E 水题一道,题意就是让求一遍最小生成树与最大生成树,但我 ...
- PAT 1027 Colors in Mars[简单][注意]
1027 Colors in Mars (20)(20 分) People in Mars represent the colors in their computers in a similar w ...
- JavaScript加强
1.Aptana简介 Aptana是一个非常强大,开源,专注于JavaScript的Ajax开发IDE它的特性包括 1.JavaScript,JavaScript函数,HTML,CSS语言的Code ...
- 如何用softmax和sigmoid来做多分类和多标签分类
首先,说下多类分类和多标签分类的区别 多标签分类:一个样本可以属于多个类别(或标签),不同类之间是有关联的,比如一个文本被被划分成“人物”和“体育人物”两个标签.很显然这两个标签不是互斥的,而是有关联 ...
- excel 数字转文本
问: 在EXCEL2003中,如何把一列数字转换成文本格式我的意思的,这一列数字全部变成带有文本格式符号(就是左上角有个绿色小三角)的那种以文本形式存储的数字.目前我只知道一个一个双击单元格,但一列数 ...
- 渗透msf工具中andorid被控端的实现
msf中andoird端的实现代码一共只有8k 核心代码就是下载者. 下载dex,动态执行dex.
- virtualBox虚拟机联网
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.