news 2026/6/10 2:01:36

[线段树(区间加 区间和 区间平方和)]P1471 方差

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[线段树(区间加 区间和 区间平方和)]P1471 方差

P1471 方差

时间限制: 1.00s 内存限制: 125.00MB

复制 Markdown

中文

退出 IDE 模式

题目背景

滚粗了的 HansBug 在收拾旧数学书,然而他发现了什么奇妙的东西。

题目描述

蒟蒻 HansBug 在一本数学书里面发现了一个神奇的数列,包含 N 个实数。他想算算这个数列的平均数和方差。

输入格式

第一行包含两个正整数 N,M,分别表示数列中实数的个数和操作的个数。

第二行包含 N 个实数,其中第 i 个实数表示数列的第 i 项。

接下来 M 行,每行为一条操作,格式为以下三种之一:

操作 1:1 x y k,表示将第 x 到第 y 项每项加上 k,k 为一实数。
操作 2:2 x y,表示求出第 x 到第 y 项这一子数列的平均数。
操作 3:3 x y,表示求出第 x 到第 y 项这一子数列的方差。

输出格式

输出包含若干行,每行为一个实数,即依次为每一次操作 2 或操作 3 所得的结果(所有结果四舍五入保留 4 位小数)。

输入输出样例

输入 #1复制运行

5 5 1 5 4 2 3 2 1 4 3 1 5 1 1 1 1 1 2 2 -1 3 1 5

输出 #1复制运行

3.0000 2.0000 0.8000

说明/提示

关于方差:对于一个有 n 项的数列 A,其方差 s2 定义如下:

s2=n1​i=1∑n​(Ai​−A)2

其中 A 表示数列 A 的平均数,Ai​ 表示数列 A 的第 i 项。

样例说明:

操作步骤输入内容操作要求数列输出结果说明
0--1 5 4 2 3--
12 1 4求 [1,4] 内所有数字的平均数1 5 4 2 33.0000平均数 =(1+5+4+2)÷4=3.0000
23 1 5求 [1,5] 内所有数字的方差1 5 4 2 32.0000平均数 =(1+5+4+2+3)÷5=3,方差 =((1−3)2+(5−3)2+(4−3)2+(2−3)2+(3−3)2)÷5=2.0000
31 1 1 1将 [1,1] 内所有数字加 12 5 4 2 3--
41 2 2 -1将 [2,2] 内所有数字加 −12 4 4 2 3--
53 1 5求 [1,5] 内所有数字的方差2 4 4 2 30.8000平均数 =(2+4+4+2+3)÷5=3,方差 =((2−3)2+(4−3)2+(4−3)2+(2−3)2+(3−3)2)÷5=0.8000

数据规模:

数据点NM备注
1∼3N≤8M≤15-
4∼7N≤105M≤105不包含操作 3
8∼10N≤105M≤105-

保证原数列和输入的所有 k 均为 [−100,100] 范围内的实数。

方差可以推导为 平方数的和/n - 平均数的平方

一段区间加d的时候 平方和的变化:

令sum1 为区间和 sum2为区间平方和

那么当长度为len的区间加d的时候

sum2+=d*d*len+2*sum1*d;

#include <bits/stdc++.h> using namespace std; #define int long long const int N=1e5+5; double a[N]; int n,m; struct SegmentTree{ int l,r; double sum,ssum,add; #define l(x) tree[x].l #define r(x) tree[x].r #define sum(x) tree[x].sum #define ssum(x) tree[x].ssum #define add(x) tree[x].add }tree[N<<2]; void pushup(int p){ sum(p)=sum(p<<1)+sum(p<<1|1); ssum(p)=ssum(p<<1)+ssum(p<<1|1); } void pushdown(int p){ if(add(p)){ ssum(p<<1)+=add(p)*add(p)*(r(p<<1)-l(p<<1)+1)+2*(sum(p<<1)*add(p)); ssum(p<<1|1)+=add(p)*add(p)*(r(p<<1|1)-l(p<<1|1)+1)+2*(sum(p<<1|1)*add(p)); add(p<<1)+=add(p); add(p<<1|1)+=add(p); sum(p<<1)+=add(p)*(r(p<<1)-l(p<<1)+1); sum(p<<1|1)+=add(p)*(r(p<<1|1)-l(p<<1|1)+1); add(p)=0; } } void build(int p,int l,int r){ l(p)=l,r(p)=r; if(l==r){sum(p)=a[l];ssum(p)=a[l]*a[l];return;} int mid=(l+r)>>1; build(p<<1,l,mid); build(p<<1|1,mid+1,r); pushup(p); } void changeadd(int p,int l,int r,double k){ if(l<=l(p)&&r>=r(p)){ ssum(p)+=k*k*(r(p)-l(p)+1)+2*(k*sum(p)); add(p)+=k; sum(p)+=k*(r(p)-l(p)+1); return; } pushdown(p); int mid=(l(p)+r(p))>>1; if(l<=mid)changeadd(p<<1,l,r,k); if(r>mid)changeadd(p<<1|1,l,r,k); pushup(p); } double querysum(int p,int l,int r){ if(l<=l(p)&&r>=r(p)){ return sum(p); } pushdown(p); int mid=(l(p)+r(p))>>1; double val=0; if(l<=mid)val+=querysum(p<<1,l,r); if(r>mid)val+=querysum(p<<1|1,l,r); return val; } double queryssum(int p,int l,int r){ if(l<=l(p)&&r>=r(p)){ return ssum(p); } pushdown(p); int mid=(l(p)+r(p))>>1; double val=0; if(l<=mid)val+=queryssum(p<<1,l,r); if(r>mid)val+=queryssum(p<<1|1,l,r); return val; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m;cout << fixed << setprecision(4); for(int i=1;i<=n;i++)cin>>a[i]; build(1,1,n); while(m--){ int op,l,r;cin>>op>>l>>r; if(op==1){ double k;cin>>k; changeadd(1,l,r,k); }else if(op==2){ cout<<1.0*querysum(1,l,r)/(r-l+1)<<'\n'; }else{ cout<<queryssum(1,l,r)/(r-l+1)-1.0*querysum(1,l,r)/(r-l+1)*1.0*querysum(1,l,r)/(r-l+1)<<'\n'; } } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 21:31:57

Fantia平台媒体资源自动下载工具的技术实现与应用

Fantia平台媒体资源自动下载工具的技术实现与应用 【免费下载链接】fantiadl Download posts and media from Fantia 项目地址: https://gitcode.com/gh_mirrors/fa/fantiadl 随着数字内容创作平台的快速发展&#xff0c;用户对于内容管理和备份的需求日益增长。Fantia作…

作者头像 李华
网站建设 2026/6/9 22:41:20

Recaf:5分钟掌握Java反编译的终极指南

Recaf&#xff1a;5分钟掌握Java反编译的终极指南 【免费下载链接】Recaf Col-E/Recaf: Recaf 是一个现代Java反编译器和分析器&#xff0c;它提供了用户友好的界面&#xff0c;便于浏览、修改和重构Java字节码。 项目地址: https://gitcode.com/gh_mirrors/re/Recaf 还…

作者头像 李华
网站建设 2026/6/9 22:41:12

机票价格监控神器:让你的旅行预算不再超支

机票价格监控神器&#xff1a;让你的旅行预算不再超支 【免费下载链接】flight-spy Looking for the cheapest flights and dont have enough time to track all the prices? 项目地址: https://gitcode.com/gh_mirrors/fl/flight-spy 还在为买贵机票而心痛吗&#xff…

作者头像 李华
网站建设 2026/6/9 22:41:32

22. 数学符号

1.数学符号1.数学符号 a.∀表示任意的, 所有的例: ∀x ∈ R, x^2 ≥ 0, 读作: 对于任意的x, x^2 ≥ 0成立b.∃表示存在至少一个c.∃!表示存在且唯一d.->表示使得, 存在条件使得...成立e.R表示实数(有理数和无理数的总称), R{x∣−∞<x<∞}表示元素的集合x满足−∞<…

作者头像 李华
网站建设 2026/6/9 23:48:56

QMCFLAC2MP3:轻松突破QQ音乐格式限制的终极解决方案

QMCFLAC2MP3&#xff1a;轻松突破QQ音乐格式限制的终极解决方案 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件&#xff0c;突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 你是否曾经因为从QQ音乐下载的音乐文件无法在…

作者头像 李华
网站建设 2026/6/9 17:24:04

Windows苹果驱动终极解决方案:一键开启iPhone完整功能

Windows苹果驱动终极解决方案&#xff1a;一键开启iPhone完整功能 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mir…

作者头像 李华