jzoj4231-寻找神格【线段树,数学】

正题


题目大意

4个操作
单点修改,区间修改,区间求和,区间求方差
方差为:∑(xi−ave)2n\frac{\sum(x_i-ave)^2}{n}n(xiave)2
aveaveave为平均值


解题思路

我们将方差的式子分解一下
∑(xi−ave)2n\frac{\sum(x_i-ave)^2}{n}n(xiave)2
∑(xi2−2∗x∗ave+ave2)n\frac{\sum(x_i^2-2*x*ave+ave^2)}{n}n(xi22xave+ave2)
(∑xi2)−2∗(∑xi)∗ave+n∗ave2n\frac{(\sum x_i^2)-2*(\sum x_i)*ave+n*ave^2}{n}n(xi2)2(xi)ave+nave2
然后因为aveaveave可以用区间和求,所以我们只需要多维护一个区间平方和
之后我们考虑如何快速计算,对于一个区间所有数都加上valvalval,之后的平方和
∑(xi+val)2\sum (x_i+val)^2(xi+val)2
我们将其分解
∑(xi2+2∗xi∗val+val2)\sum (x_i^2+2*x_i*val+val^2)(xi2+2xival+val2)
(∑xi2)+(∑xi)∗2∗val+n∗val2(\sum x_i^2)+(\sum x_i)*2*val+n*val^2(xi2)+(xi)2val+nval2
然后(∑xi2)(\sum x_i^2)(xi2)(∑xi)(\sum x_i)(xi)我们都知道,所以可以直接计算之后的平方和。


codecodecode

#include<cstdio>
#define N 100010
#define ll long long
#define lodu long double
using namespace std;
struct tree_node{ll l,r,w,ww,lazy;
}t[N<<2];
ll n,q;
lodu sum_f;
void build(ll k,ll l,ll r)//建树
{t[k].l=l;t[k].r=r;if(l==r){scanf("%lld",&t[k].w);t[k].ww=t[k].w*t[k].w;return;}ll mid=(l+r)>>1;build(k*2,l,mid);build(k*2+1,mid+1,r);t[k].w=t[k*2].w+t[k*2+1].w;t[k].ww=t[k*2].ww+t[k*2+1].ww;
}
void get_fan(ll k,ll z)//求区间加了z之后的区间平方和
{t[k].ww=t[k].ww+t[k].w*2*z+z*z*(t[k].r-t[k].l+1);}
void downdata(ll k){if(t[k].lazy==0) return;get_fan(k*2,t[k].lazy);get_fan(k*2+1,t[k].lazy);	t[k*2].w+=t[k].lazy*(t[k*2].r-t[k*2].l+1);t[k*2+1].w+=t[k].lazy*(t[k*2+1].r-t[k*2+1].l+1);t[k*2].lazy+=t[k].lazy;t[k*2+1].lazy+=t[k].lazy;t[k].lazy=0;
}//下传lazy标记
void change(ll k,ll l,ll r,ll z)//区间修改
{if(t[k].l==l&&t[k].r==r){get_fan(k,z);t[k].lazy+=z;t[k].w+=z*(r-l+1);return;}downdata(k);if(r<=t[k*2].r) change(k*2,l,r,z);else if(l>=t[k*2+1].l) change(k*2+1,l,r,z);else change(k*2,l,t[k*2].r,z),change(k*2+1,t[k*2+1].l,r,z);t[k].ww=t[k*2].ww+t[k*2+1].ww;t[k].w=t[k*2].w+t[k*2+1].w;
}
ll get_sum(ll k,ll l,ll r)//区间求和和平方和
{if(t[k].l==l&&t[k].r==r){sum_f+=t[k].ww;return t[k].w;}downdata(k);if(r<=t[k*2].r) return get_sum(k*2,l,r);if(l>=t[k*2+1].l) return get_sum(k*2+1,l,r);return get_sum(k*2,l,t[k*2].r)+get_sum(k*2+1,t[k*2+1].l,r);
}
int main()
{//freopen("data.in","r",stdin);//freopen("data.out","w",stdout);scanf("%lld%lld",&n,&q);build(1,1,n);for(ll i=1;i<=q;i++){ll ts,a,b,z;scanf("%lld%lld%lld",&ts,&a,&b);if(ts==0) change(1,a,a,b);else if(ts==1){scanf("%lld",&z);change(1,a,b,z);}else if(ts==2) sum_f=0,printf("%lld\n",get_sum(1,a,b));else{sum_f=0;lodu ave,ans,sum=get_sum(1,a,b),n=b-a+1;ave=sum/n;ans=sum_f+ave*ave*n-sum*ave*2; printf("%0.10Lf\n",ans/n);}}
}

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

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

相关文章

Hadoop入门(十四)Mapreduce的数据去重程序

1 实例描述 对数据文件中的数据进行去重。数据文件中的每行都是一个数据 样例输入如下所示&#xff1a; 1&#xff09;file1 2012-3-1 a 2012-3-2 b 2012-3-3 c 2012-3-4 d 2012-3-5 a 2012-3-6 b 2012-3-7 c 2012-3-3 c 2&#xff09;file2 2012-3-1 b 2012-3-2 a 2012…

spring boot输出hello world几种方法

1、手动配置&#xff0c;三个文件 打开创建maven,创建这三个文件从上到下依次复制即可 配置文件&#xff08;重要&#xff09;&#xff08;否则后面会报错&#xff09; pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w…

欢乐纪中某B组赛【2019.1.20】

前言 有回来做BBB组了&#xff0c;话说第3道题就是AAA组第一道。 成绩 RankRankRank是有算别人的 今天XJQXJQXJQ不在 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC1112017wyc2017wyc2017wyc2702702701001001001001001007070701010102017hjq2017hjq2017hjq13013013…

向ASP.NET Core迁移

我们首先来看看ASP.NET Core有哪些优势&#xff1f; 跨平台&#xff1a;可以部署到Linux服务器上 内置一套对云和部署环境非常友好的配置模块 内置依赖注入 IIS或者Kestrel&#xff08;或者其它自定义&#xff09; 轻量级、高性能、模块化的Http处理管线 .NET Core 是开源…

Hadoop入门(十五)Mapreduce的数据排序程序

"数据排序"是许多实际任务执行时要完成的第一项工作&#xff0c;比如学生成绩评比、数据建立索引等。这个实例和数据去重类似&#xff0c;都是先对原始数据进行初步处理&#xff0c;为进一步的数据操作打好基础 1 实例描述 对输入文件中数据进行排序。输入文件中的…

Java我来了

引言 原本我也是个计算机的小白&#xff0c;从今年的二月份开始学习java&#xff0c;接触eclipse&#xff0c;终于算是开启了我的编程之旅。 在此之前我也不算是零基础&#xff0c;学校在上学期还未开设c语言课程的时候&#xff0c;我就自学了c语言&#xff0c;学的不深&#x…

jzoj4208-线段树什么的最讨厌了【dfs】

正题 题目大意 一个0∼n0\sim n0∼n的线段树包含l∼rl\sim rl∼r的区间&#xff0c;求最小的nnn 解题思路 dfsdfsdfs一下&#xff0c;从下面开始往上扩展区间&#xff0c;知道变成0∼x0\sim x0∼x的格式就就可以去最小值了。 记得剪枝 codecodecode #include<cstdio> …

Hadoop入门(十六)Mapreduce的单表关联程序

"单表关联"要求从给出的数据中寻找所关心的数据&#xff0c;它是对原始数据所包含信息的挖掘 1 实例描述 给出child-parent&#xff08;孩子——父母&#xff09;表&#xff0c;要求输出grandchild-grandparent&#xff08;孙子——祖父母&#xff09;表 样例输入&…

ASP.NET Core集成现有系统认证

我们现在大多数转向ASP.NET Core来使用开发的团队&#xff0c;应该都不是从0开始搭建系统&#xff0c;而是老的业务系统已经在运行&#xff0c;ASP.NET Core用来开发新模块。那么解决用户认证的问题&#xff0c;成为我们的第一个拦路虎。 认证与授权 什么是认证&#xff1f; …

Hadoop入门(十七)Mapreduce的多表关联程序

多表关联和单表关联类似&#xff0c;它也是通过对原始数据进行一定的处理&#xff0c;从其中挖掘出关心的信息 1 实例描述 输入是两个文件&#xff0c;一个代表工厂表&#xff0c;包含工厂名列和地址编号列&#xff1b;另一个代表地址表&#xff0c;包含地址名列和地址编号列…

jzoj4209-已经没有什么好害怕的了【差分】

正题 题目大意 ansians_iansi​表示包含字符iii的括号匹配子串个数 求∑i1n(ansi∗imod&ThinSpace;&ThinSpace;(1e97))\sum_{i1}^n(ans_i*i\mod (1e97))i1∑n​(ansi​∗imod(1e97)) 解题思路 计算出每个匹配括号的前一个括号位置和后一个括号位置。 一个差分数组 先…

使用Identity Server 4建立Authorization Server (4)

预备知识: 学习Identity Server 4的预备知识 第一部分: 使用Identity Server 4建立Authorization Server (1) 第二部分: 使用Identity Server 4建立Authorization Server (2) 第三部分: 使用Identity Server 4建立Authorization Server (3) 上一篇讲了使用OpenId Connect进行Au…

linux操作命令

uname -r 显示正在使用的内核版本、 docker exec -it mytomcat bash 进入tomcat界面 pwd 显示工作路径 ls 查看当前目录中的文件 docker docker run -d -p 8080:8080 tomcat 启动tomcat镜像 docker start id 编辑文件 touch 文件名 创建文件 mkdir dir1 创建一个叫做 ‘dir1…

Hadoop入门(十八)Mapreduce的倒排索引程序

一、简介 "倒排索引"是文档检索系统中最常用的数据结构&#xff0c;被广泛地应用于全文搜索引擎。它主要是用来存储某个单词&#xff08;或词组&#xff09;在一个文档或一组文档中的存储位置的映射&#xff0c;即提供了一种根据内容来查找文档的方式。由于不是根据…

.NET Core跨平台的奥秘[中篇]:复用之殇

在《.NET Core跨平台的奥秘[上篇]&#xff1a;历史的枷锁》中我们谈到&#xff1a;由于.NET是建立在CLI这一标准的规范之上&#xff0c;所以它天生就具有了“跨平台”的基因。在微软发布了第一个针对桌面和服务器平台的.NET Framework之后&#xff0c;它开始 “乐此不疲” 地对…

jozj4010-我才不是萝莉控呢【哈夫曼树】

正题 题目大意 从(n,1)(n,1)(n,1)到(1,1)(1,1)(1,1)&#xff0c;一个数组AAA&#xff0c;满足Ai≥Ai1A_i\geq A_i1Ai​≥Ai​1 每次有两个选择走到(x−1,y1)(x-1,y1)(x−1,y1)&#xff0c;或(x,⌊y/2⌋)(x,\lfloor y/2\rfloor)(x,⌊y/2⌋)。后者需要消耗∑ixnAi\sum_{ix}^nA_i…

java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized

在application.yml中 spring:datasource:username: rootpassword:url: jdbc:mysql://127.0.0.1:3306/testdriver-class-name: com.mysql.cj.jdbc.Driver结果报错 java.sql.SQLException: The server time zone value ‘&#xfffd;й&#xfffd;&#xfffd;&#xfffd;׼ʱ…

Hadoop入门(十一)Mapreduce的InputFomrat各种子类

一、TextInputFormat extends FileInputFomrat<LongWritable,Text> 是默认读取文件的切分器&#xff0c;其内的LineRecordReader:用来读取每一行的内容&#xff0c; LineRecordReader:内的 nextKeyValue(){}中&#xff0c;key的赋值在&#xff1a; initialize()方法内&…

欢乐纪中某B组赛【2019.1.21】

前言 成功翻车 成绩 RankRankRank是有算别人的 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC1414142017hzb2017hzb2017hzb8080803030300005050501414142017wyc2017wyc2017wyc8080800003030305050501414142017xxy2017xxy2017xxy8080803030300005050504444442017lw2…

极简版ASP.NET Core学习路径

拒绝承认这是一个七天速成教程&#xff0c;即使有这个效果&#xff0c;我也不愿意接受这个名字。嗯。 这个路径分为两块&#xff1a; 实践入门 理论延伸 有了ASP.NET以及C#的知识以及项目经验&#xff0c;我们几乎可以不再需要了解任何新的知识就开始操练&#xff0c;实践才是…