题目传送门

开了十倍空间才过是什么鬼?该不会我线段树炸了吧……
细思极恐


平均数都会求,维护区间和,到时候除一下就好了。

方差的求法如下
(用的Luogu的图片)
因为要维护一个平方,我们可以考虑使用van♂完全平方公式将它拆开,这样只用线段树维护区间和和区间平方和就可以了。
对于区间修改,同样使用完全平方公式。

要注意的一点是,修改时,要先修改平方和,再修改和,因为我们修改平方和时要用到区间和。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ls p<<1
#define rs p<<1|1
#define mid ((l+r)>>1)
using namespace std;
struct zzz{double sum,pf;
}tree[1000010<<2];
double tag[1000010<<2],a[1000010];
inline void up(int p){tree[p].sum=tree[ls].sum+tree[rs].sum;tree[p].pf=tree[ls].pf+tree[rs].pf;
}
void build(int l,int r,int p){if(l==r){tree[p].sum=a[l];tree[p].pf=a[l]*a[l];return ;}build(l,mid,ls); build(mid+1,r,rs);up(p);
}
inline void down(int l,int r,int p){
//用完全平方公式修改平方和tree[ls].pf+=2*tree[ls].sum*tag[p]+tag[p]*tag[p]*(mid-l+1);tree[rs].pf+=2*tree[rs].sum*tag[p]+tag[p]*tag[p]*(r-mid);
//维护区间和tree[ls].sum+=tag[p]*(mid-l+1);tree[rs].sum+=tag[p]*(r-mid);tag[ls]+=tag[p]; tag[rs]+=tag[p]; tag[p]=0;
}
void update(int l,int r,int p,int nl,int nr,double k){if(l>=nl&&r<=nr){tree[p].pf+=2*tree[p].sum*k+k*k*(r-l+1);tree[p].sum+=k*(r-l+1);tag[p]+=k;return ;}down(l,r,p);if(nl<=mid) update(l,mid,ls,nl,nr,k);if(nr>mid) update(mid+1,r,rs,nl,nr,k);up(p);
}
double query(int l,int r,int p,int nl,int nr){double ans=0;down(l,r,p);if(l>=nl&&r<=nr) return tree[p].sum;if(nl<=mid) ans+=query(l,mid,ls,nl,nr);if(nr>mid) ans+=query(mid+1,r,rs,nl,nr);return ans;
}
double query2(int l,int r,int p,int nl,int nr){double ans=0;down(l,r,p);if(l>=nl&&r<=nr) return tree[p].pf;if(nl<=mid) ans+=query2(l,mid,ls,nl,nr);if(nr>mid) ans+=query2(mid+1,r,rs,nl,nr);return ans;
}
int read(){int k=0,f=1; char c=getchar();for(;c<'0'||c>'9';c=getchar())if(c=='-') f=-1;for(;c>='0'&&c<='9';c=getchar())k=k*10+c-48;return k*f;
}
int main(){int n=read(),m=read();for(int i=1;i<=n;i++) scanf("%lf",&a[i]);build(1,n,1);for(int i=1;i<=m;i++){int opt=read(),l=read(),r=read();if(opt==1){double k; scanf("%lf",&k);update(1,n,1,l,r,k);}if(opt==2){printf("%.4lf\n",query(1,n,1,l,r)/(r-l+1));}if(opt==3){double sum=query(1,n,1,l,r);double pj=sum/(r-l+1);double pf=query2(1,n,1,l,r);printf("%.4lf\n",(pf-2*sum*pj+pj*pj*(r-l+1))/(r-l+1));}}return 0;
}

转载于:https://www.cnblogs.com/wxl-Ezio/p/9911258.html

Luogu P1471 方差相关推荐

  1. luogu P1471 方差 P5142 区间方差

    背景: 话说今天晚上就要去丰山那边上课了. 数学竞赛昨天考完了,碰见几个某 J J J中学的朋友(政治敏感话题), 好像看反了题. 又合并了两道题. 题目传送门: https://www.luogu. ...

  2. 近期打算及毕业前要补完的题

    之前总是开玩笑的说"退竞了退竞了",这次看来是真的退役了.想想这一年来的学习历程,有欢笑也有汗水.可能还是因为自己太菜,可能还是因为自己不够努力,最终还是滚去学文化课了. 辜负了教 ...

  3. 2021-07-08~2021-07-22总结--zhengjun

    目录在此 2021-07-08~2021-07-22总结--zhengjun 7.8 考试过程 学习的算法 AC的题目 正在调试的题目 7.9 考试过程 学习的内容 AC的题目 正在调试的题目 7.1 ...

  4. 暑假训练-义乌(7.8-7.15)

    暑假训练 模拟赛 图表 数据 7.8(lxl) 7.9(lxl) 7.10(lxl) 7.11(lxl) 7.12(wls) 7.13(wls) 7.14(wls) 7.15(lfds) 训练 数据结 ...

  5. luogu P5142 区间方差(线段树、乘法逆元)

    luogu P5142 区间方差 本题要求维护模区间方差,很明显是一道数据结构题. 我们化简方差公式: 而平均数等于 可以发现,我们只需要维护序列的区间和和区间平方和,就可以维护平均数和方差. 区间和 ...

  6. luogu 1471

    题意: 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. 操作1:1 x y k ,表示将第x到第y项每项加上k,k为一实数. 操作2:2 x y ...

  7. P7962-[NOIP2021]方差【dp,差分】

    正题 题目链接:https://www.luogu.com.cn/problem/P7962 题目大意 给出一个长度为nnn的序列aaa,你每次可以让一个ai(1<i<n)=ai−1+ai ...

  8. 什么是高/低方差、高/低偏差、(推荐阅读)

    2021071 https://www.pianshen.com/article/71161696005/ 方差是对多个样本集的比较而言? 摘要:在现实任务中,我们往往有多种学习算法可供选择,甚至对同 ...

  9. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

最新文章

  1. 世界硬币:比特币类似的评分系统!
  2. 设置Qt应用程序图标
  3. QML学习笔记-对QML基本认识
  4. oracle基础学习---------1
  5. Nginx报错:upstream timed out (110: Connection timed out)和client intended to send too large body【转】...
  6. 60-40-040-序列化-Twitter 的Avro序列化
  7. easyui弹出层在最顶层显示跳出iframe框架通用javascript代码
  8. iOS-项目开发1-UIImage
  9. 屏蔽登录QQ后总是弹出的QQ网吧页面
  10. 理解Java - JDK动态代理原理
  11. windows下双击可运行的Java软件打包方案
  12. 基于python的销售系统_python实现超市商品销售管理系统
  13. FM信号测试软件,音频测试方案:音频FM指标测试方法
  14. 精度、召回率、准确率、F-score
  15. FAT32、exFAT、NTFS
  16. Linxu-解压压缩命令
  17. 苹果一体机装win10系统无声音
  18. Vue+SpringBoot实现Excel在线预览功能(PS:添加样式比较费劲)
  19. vm fusion Linux系统克隆
  20. 植物大战僵尸设计元素浅析

热门文章

  1. [HNOI2003]消防局的设立(贪心)
  2. java架构分层_java分层架构概念
  3. 【OS】经典调度算法
  4. 【计算机组成原理】定点数的表示和运算
  5. 构造器是什么?(Java篇)
  6. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](6)
  7. 『操作系统』 进程的描述与控制 Part4 线程
  8. 2019.9.18最小生成树知识点总结
  9. java kafka 多线程消费
  10. Lua中的metatable