以前只知道方差=(∑(xi-x)^2)/n,1<=i<=n。x是平均数

没有办法用一棵线段树来维护方差。

现在知道了方差=Var[x] = E[x^2] - E[x]^2,就是平方的期望减去期望的平方。

所以用两颗线段树分别维护区间和与平方的区间和。然后算出答案就好了。

我们都知道,我们都知道,但我咋就不知道呢

以后要多打比赛,感觉打比赛收获很大。

代码

#include<bits/stdc++.h>
#define ls (now<<1)
#define rs (ls|1)
using namespace std;
typedef long long ll;
const ll maxn=(1<<16)+10;
typedef pair<double,double> pdd;ll n,m;
ll a[maxn];double tree1[maxn<<2];
double tree2[maxn<<2];void up_data(ll now)
{tree1[now]=tree1[ls]+tree1[rs];tree2[now]=tree2[ls]+tree2[rs];
}ll K;void BUILD(ll l,ll r,ll now)
{if(l==r){tree1[now]=a[K];tree2[now]=a[K]*a[K];K++;return;}ll m=(l+r)>>1;BUILD(l,m,ls);BUILD(m+1,r,rs);up_data(now);
}void A(ll l,ll r,ll now,ll pos,ll val)
{if(l==r){tree1[now]=val;tree2[now]=val*val;return;}ll m=(l+r)>>1;if(pos<=m) A(l,m,ls,pos,val);else A(m+1,r,rs,pos,val);up_data(now);
}pdd Q(ll l,ll r,ll now,ll ql,ll qr)
{if(ql<=l&&r<=qr) return make_pair(tree1[now],tree2[now]);ll m=(l+r)>>1;pdd ansl=make_pair(0,0);pdd ansr=make_pair(0,0);if(ql<=m) ansl=Q(l,m,ls,ql,qr);if(qr>m) ansr=Q(m+1,r,rs,ql,qr);return make_pair(ansl.first+ansr.first,ansl.second+ansr.second);
}int main()
{while(scanf("%lld %lld",&n,&m)==2){for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);K=1;BUILD(1,n,1);ll x,y;while(m--){scanf("%lld",&x);if(x==1){scanf("%lld %lld",&x,&y);A(1,n,1,x,y);}else{scanf("%lld %lld",&x,&y);ll l=y-x+1;pdd p=Q(1,n,1,x,y);printf("%lld\n",ll(floor((p.second/l-(p.first*p.first/l/l))*l*l+0.5)));}}}return 0;
}

线段树,方差,数学(Variance,玲珑杯 Round#5 H lonlife 1063)相关推荐

  1. Gym-101466K Random Numbers(线段树,数学,唯一分解定理)

    给一棵树,树上每个节点有一个权值,有两个操作,RAND操作查询u的子树乘积是多少以及有多少因数,SEED操作把节点u乘上v n,q <= 1e5.数值小于等于1e9,最大的质因数不超过13 组队 ...

  2. Codeforces 311D Interval Cubing 数学 + 线段树 (看题解)

    Interval Cubing 这种数学题谁顶得住啊. 因为 (3 ^ 48) % (mod - 1)为 1 , 所以48个一个循环节, 用线段树直接维护. #include<bits/stdc ...

  3. hicoder - 1068 【RMQ or 线段树】

    hicoder - 1068 [RMQ or 线段树] RMQ: 1 #include <bits/stdc++.h> 2 #define rep(i,a,b) for(int i = a ...

  4. Vijos P1103 校门外的树【线段树,模拟】

    校门外的树 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,--, ...

  5. I Hate It(线段树)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. POJ-3067 Japan(树状数组、线段树)

    题目链接 Description Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built f ...

  7. Codeforces 671C Ultimate Weirdness of an Array 线段树 (看题解)

    Ultimate Weirdness of an Array 写不出来, 日常好菜啊.. 考虑枚举GCD, 算出一共有多少个对 f(l, r) <= GCD, 我们用fuc[ i ] 表示的是在 ...

  8. 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)

    传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...

  9. POJ2155 Matrix二维线段树经典题

    题目链接 二维树状数组 1 #include<iostream> 2 #include<math.h> 3 #include<algorithm> 4 #inclu ...

  10. hdu1754 I hate it线段树模板 区间最值查询

    题目链接:这道题是线段树,树状数组最基础的问题 两种分类方式:按照更新对象和查询对象 单点更新,区间查询; 区间更新,单点查询; 按照整体维护的对象: 维护前缀和; 维护区间最值. 线段树模板代码 # ...

最新文章

  1. Windows设置软件开机自启动与关闭
  2. 网络推广人员需要掌握的九大查询工具
  3. 【C/C++开发】C++实现字符串替换的两种方法
  4. android studio 无法输入中文,Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案...
  5. ICLR 2021 | 腾讯 AI Lab 入选论文解读
  6. 康柏川(帮别人名字作诗)
  7. Mybatis 常用开发注解(批量插入)
  8. 2022黑马程序员-前端学习第一阶段(Day02-HTML基础)
  9. 计算机桌面常用图标,电脑常用软件图标 常用的电脑软件图标
  10. Speedoffice(word)怎么撤回上一步的操作
  11. 10款3D桌面推荐,很不错哦
  12. 二阶梯度优化新崛起,超越 Adam,Transformer 只需一半迭代量
  13. 获取USB摄像头名字和device ID等信息
  14. Interop type 'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded. Use the applicable
  15. pads 添加复用模块技巧、
  16. 软件测试工程师-面试如何使用代码进行接口测试?
  17. ITOP资产信息登记指导书
  18. 计算机数据恢复试题,数据恢复半期考试试题答案.doc
  19. 原创如何解决内存不能为“read”或“written”
  20. Android包管理机制5 APK是如何被解析的

热门文章

  1. 编译MKL50.1 (for 一加手机)
  2. 云计算技术基础【9】
  3. FastText学习笔记
  4. Guava的两种本地缓存策略
  5. 放弃了灰色轨迹的人,放弃了木马帝国的人(ALLyeSNO)
  6. Perl 输出数据结构:Dumper
  7. robots文件的作用
  8. Python网页截图/屏幕截图/截长图如何实现?
  9. ALPS语言学校(西雅图)|ALPS Language School (Seattle)
  10. 等比数列求和python_numpy的logspace产生等比数列