Luogu P1471 方差

题目传送门

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


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

方差的求法如下
2264.png(用的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python学习day17 递归函数

递归函数 http://www.cnblogs.com/Eva-J/articles/7205734.html def age(n):if n 4:return 40elif n >0 and n < 4:return age(n1) 2print(age(1)) # 46 只要写递归函数&#xff0c;必须要有结束条件。 二分法查找 l [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,5…

2018年最好用的20个Bootstrap网站模板

Bootstrap是目前最受欢迎也是最简洁的建站方式之一&#xff0c;尤其是伴随移动端的发展&#xff0c;响应式设计已经毫无疑问成为了网页设计的趋势&#xff0c;网站建设要求兼容手机端已经是一种刚需&#xff0c;也成为提升用户体验的一种必要方式。但这无疑会加大设计师和前端人…

bit、byte、位、字节、汉字、字符之间的区别

package com.suypower.chengyu.test; public class ByteTest { /** * byte 8 bits -128 - 127 * 1 bit 1 二进制数据 * 1 byte 8 bit * 1 字母 1 byte 8 bit(位) * 1 汉字 2 byte 16 bit */ public static void main(String[] args) { // TODO Auto-generated method st…

Android SDK 2.3/3.0/4.0/4.2 下载与安装教程

Eclipse下搭建Android开发环境教程&#xff1a;http://dev.son1c.com/show/1253.html Google已经发布了Android SDK 4.2版本.下面给朋友们介绍一下安装 Android 模拟器 Emulator模拟器的方法: 1、首先确定安装了Java JDK&#xff0c;如果没有&#xff0c;可以去http://www.ora…

PMP:4.项目整合管理

内容中包含 base64string 图片造成字符过多&#xff0c;拒绝显示转载于:https://www.cnblogs.com/mapanguan/p/9916902.html

浏览器渲染原理与过程

一、浏览器如何渲染网页 要了解浏览器渲染页面的过程&#xff0c;首先得知道一个名词——关键路径渲染。关键渲染路径&#xff08;Critical Rendering Path&#xff09;是指与当前用户操作有关的内容。例如用户在浏览器中打开一个页面&#xff0c;其中页面所显示的东西就是当前…

css框架:五大css流行框架的总结-css教程-PHP中文网

本篇文章给大家带来的内容是关于css框架&#xff1a;五大css流行框架的总结&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。 如今&#xff0c;CSS框架越来越受欢迎&#xff0c;可以说已经应用到每一个网站上了。作为开发工具…

第十四天

###数组&#xff1a;面向对象的方式创建&#xff1a;var arr01 new Array(1,2,3,"abc");直接创建&#xff1a;var arr02 [1,2,3,"abc"]alert (arr02.length);alert(arr02[3]);var arr03 [[1,2,3],["a","b","c","d&q…

【English Email】CIP payouts now in Workday

simplification简化的[ˌsɪmplɪfɪˈkeɪʃn] quota配额[ˈkwoʊtə] regional区域的[ˈriːdʒənl] mechanics技工[məˈknɪks] annual年度的 [ˈnjuəl] mid-year年中 [mɪd jɪr] bridge桥接[brɪdʒ] Incentive激励 [ɪnˈsentɪv] Due to the simplification of …

爬取网页的通用代码框架

import requests def getHTMLText(url)try:r requests.get(url,timeout30)r.raise_for_status()r.encoding r.apparent_encodingreturn r.textexcept:return "产生异常"if__name__ "__main__"url "http://www.baidu.com"print(getHTMLText(ur…

深入理解CSS盒模型 - 程序猿的程 - 博客园

深入理解CSS盒模型 本文是学习中传思客在慕课网开的课程《前端跳槽面试必备技巧》的学习笔记。课程地址&#xff1a;https://coding.imooc.com/class/evaluation/129.html#Anchor。 如果你在面试的时候面试官让你谈谈对盒模型的理解&#xff0c;你是不是不知从何谈起。这种看似…

蓝桥杯——机器人行走

某少年宫引进了一批机器人小车。可以接受预先输入的指令&#xff0c;按指令行动。小车的基本动作很简单&#xff0c;只有3种&#xff1a;左转&#xff08;记为L&#xff09;&#xff0c;右转&#xff08;记为R&#xff09;&#xff0c;向前走若干厘米&#xff08;直接记数字&am…

JavaWeb:脚本标识

脚本标识 一、JSP表达式 1、介绍 用于向页面中输出信息 2、语法格式 <% 表达式%>3、注意 在"<%"和""之间不允许有空格&#xff0c;但是在""后面的表达式之间可以有空格不仅可以插入到网页中&#xff0c;还可以插入到HTML标记中&#xf…

线程死锁问题

1 package com.demo.bingfa;2 3 /**4 * java并发编程中&#xff0c;死锁的概念5 *6 * 我们启用了两个线程&#xff0c;分别抢占2个资源&#xff0c;但这两个资源又分别被不同的对象&#xff08;字符串&#xff09;锁住了。7 * 当第一个线程调用 resource1 方法&#xff0c;…

CSS的4个简写

CSS的4个简写 2010-12-13 18:50 聂微东 阅读(1547) 评论(3) 编辑 收藏 1.background 简写属性在一个声明中设置所有的背景属性: background-colorbackground-imagebackground-repeatbackground-attachmentbackground-position 例如: background: #444444 url(image.png…

spring boot 整合 (全)

参考: https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples转载于:https://www.cnblogs.com/lshan/p/9924005.html

使用PM2搭建在线vue.js开发环境(以守护进程方式热启动)

项目以vue.jslayUI的作为前端开发技术栈&#xff0c;需要有一个在线的环境供项目成员实时查看效果&#xff0c;总不能每次都webpack打包发布后才能看到效果吧&#xff01;刚开始就简单使用npm run dev命令热启动&#xff0c;但是shell命令窗口退出后&#xff0c;热启动也就失效…

微信小程序工具类

wechat-common-sdk ? 场景&#xff1a;目前工作中的项目需要包含并使用另一个项目。 也许是第三方库&#xff0c;或者你独立开发的&#xff0c;用于多个父项目的库。 现在问题来了&#xff1a;你想要把它们当做两个独立的项目&#xff0c;同时又想在一个项目中使用另一个。 我…

zabbix实现mysql数据库的监控

先来介绍zabbix中几个常用的术语&#xff1a; 主机&#xff08;host&#xff09;&#xff1a; 要监控的网络设备&#xff0c;可由ip或DNS名称指定。 主机组&#xff08;host group&#xff09;&#xff1a; 主机的逻辑容器&#xff0c;可以包含主机和模板&#xff…

VSCode配合eslint进行JavaScript质量检查

写在开始前&#xff1a;如有不准确的地方希望大家提出&#xff0c;文章可以改知识不能错。 创建一个项目 这里已node项目为例 npm init 根据提示填写相关信息 安装eslint npm install eslint --save也可以全局安装 npm install eslint -g初始化 eslint文件 eslint --init执行命…