那是上上周。。。也是重构了四遍。。。后来GG了。。。今天又拾起,搞了搞终于过了。。。


好吧就是个线段树,公式懒得推了https://www.cnblogs.com/Jackpei/p/10693561.html大致差不错

#include<iostream>
#include<cstdio>
#define R register int
#define ls (tr<<1)
#define rs (tr<<1|1)
using namespace std;
int n,m;
double sum[],po[],tg[];
inline void upd(int tr){sum[tr]=sum[ls]+sum[rs]; po[tr]=po[ls]+po[rs];}
inline void build(int tr,int l,int r) {
if(l==r) {scanf("%lf",&sum[tr]),po[tr]=sum[tr]*sum[tr]; return ;} R md=l+r>>;
build(ls,l,md),build(rs,md+,r); upd(tr);
}
inline void change(int tr,int l,int r,double d) {po[tr]+=d*(d*(r-l+)+2.0*sum[tr]),sum[tr]+=(r-l+)*d;}
inline void spread(int tr,int l,int r) { R md=l+r>>;
if(tg[tr]) change(ls,l,md,tg[tr]),change(rs,md+,r,tg[tr]),tg[ls]+=tg[tr],tg[rs]+=tg[tr],tg[tr]=;
}
inline void update(int tr,int l,int r,int LL,int RR,double d){
if(LL<=l&&r<=RR) {tg[tr]+=d,change(tr,l,r,d);return;} spread(tr,l,r); R md=l+r>>;
if(LL<=md) update(ls,l,md,LL,RR,d); if(RR>md) update(rs,md+,r,LL,RR,d); upd(tr);
}
inline double query1(int tr,int l,int r,int LL,int RR){
if(LL<=l&&r<=RR) return sum[tr]; spread(tr,l,r); R md=l+r>>; register double ret=;
if(LL<=md) ret+=query1(ls,l,md,LL,RR); if(RR>md) ret+=query1(rs,md+,r,LL,RR); return ret;
}
inline double query2(int tr,int l,int r,int LL,int RR){
if(LL<=l&&r<=RR) return po[tr]; spread(tr,l,r); R md=l+r>>; register double ret=;
if(LL<=md) ret+=query2(ls,l,md,LL,RR); if(RR>md) ret+=query2(rs,md+,r,LL,RR); return ret;
}
inline void solve1(int l,int r){printf("%.4lf\n",query1(,,n,l,r)/(double)(r-l+));}
inline void solve2(int l,int r){
double ave=query1(,,n,l,r)/(double)(r-l+),x=query2(,,n,l,r),s=query1(,,n,l,r);
printf("%.4lf\n",(x+(double)(r-l+)*ave*ave-2.0*s*ave)/(double)(r-l+));
}
signed main(){
scanf("%d%d",&n,&m); build(,,n);
for(int i=;i<=m;++i){ R k,l,r; register double d;
scanf("%d%d%d",&k,&l,&r);
if(k==) scanf("%lf",&d),update(,,n,l,r,d);
else if(k==) solve1(l,r); else solve2(l,r);
}
}

2019.04.22 唉QAQ...

Luogu P1471 方差 线段树的更多相关文章

  1. Luogu P1471 方差

    题目传送门 开了十倍空间才过是什么鬼?该不会我线段树炸了吧-- 细思极恐 平均数都会求,维护区间和,到时候除一下就好了. 方差的求法如下 (用的Luogu的图片) 因为要维护一个平方,我们可以考虑使用 ...

  2. [Luogu] 可持久化线段树 1(主席树)

    https://www.luogu.org/problemnew/show/P3834 #include<cstdio> #include<iostream> #include ...

  3. Luogu P5280 [ZJOI2019]线段树

    送我退役的神题,但不得不说是ZJOIDay1最可做的一题了 先说一下考场的ZZ想法以及出来后YY的优化版吧 首先发现每次操作其实就是统计出增加的节点个数(原来的不会消失) 所以我们只要统计出线段树上每 ...

  4. 【题解】Luogu P1471 方差

    原题传送门 简单进行推导之后,就能发现很妙的结论 用线段树维护区间和,区间平方和就珂以算出结果 #include <bits/stdc++.h> #define db double #de ...

  5. luogu 1712 区间(线段树+尺取法)

    题意:给出n个区间,求选择一些区间,使得一个点被覆盖的次数超过m次,最小的花费.花费指的是选择的区间中最大长度减去最小长度. 坐标值这么大,n比较小,显然需要离散化,需要一个技巧,把区间转化为半开半闭 ...

  6. Luogu P3960 列队 线段树

    题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护 ...

  7. luogu P2073 送花 线段树

    思路&心路 一眼认定沙比提 写的比较慢,写了1小时吧 开心的交上去 卧槽,只有20? 不服不服,拿着题解的代码去对拍 Emma,<100没问题 100000数据错了,还只是错了一个数据 ...

  8. 【洛谷】【线段树】P1471 方差

    [题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...

  9. 2018.08.16 洛谷P1471 方差(线段树)

    传送门 线段树基本操作. 把那个方差的式子拆开可以发现只用维护一个区间平方和和区间和就可以完成所有操作. 同样区间修改也可以简单的操作. 代码: #include<bits/stdc++.h&g ...

随机推荐

  1. DAY8-python之网络编程

    一.客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  2. ubuntu16搭建docker私库

    测试环境如下: 一.docker的安装 安装方法请查看这里的 安装教程 二.设置普通用户 1. centos的设置方法 $ sudo gpasswd -a docker ${USER} 2. ubun ...

  3. 奇葩问题 eclipse下 maven项目 java Resource报个小红叉,然而里面却没有小红叉

    之前没注意,不知是一开始就有还是这两天才有,说下解决方案: 右击项目“Properties”,在弹出的“Properties”的左侧边框,单击“Project Facets”,打开“Project F ...

  4. 2018多校第九场1010 (HDU6424) 数学

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6424 解法:找规律.因为最多三项,a1^a2^a3可以拆成(a1+2)+(a2+1)*a3,然后建成数 ...

  5. cocos2d-js 序列帧动画

    var spriteCache = cc.spriteFrameCache;spriteCache.addSpriteFrames(res.fireworks_plist,res.fireworks_ ...

  6. ROS Learning-007 beginner_Tutorials ROS节点

    ROS Indigo beginner_Tutorials-06 ROS节点 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...

  7. Python 黑客 --- 001 UNIX口令破解机

    Python 黑客 实战:UNIX口令破解机 使用的系统:Ubuntu 14.04 LTS Python语言版本:Python 2.7.10 V crypt 库是Python内置的库.在UNIX系统使 ...

  8. 华为JAVA机试流程

    1.JAVA机试流程:①打开IE浏览器,输入机试系统IP地址(以当天告知的地址为准):②输入姓名.手机,选择“C/C++”或“JAVA”,登录:③登录后显示题目,阅读题目并点击页面最下方的“下载框架文 ...

  9. Entity Framework Tutorial Basics(23):Add Single Entity

    Add New Entity using DBContext in Disconnected Scenario: In this chapter you will learn how to add n ...

  10. Entity Framework Tutorial Basics(17):DBSet Class

    DBSet Class DBSet class represents an entity set that is used for create, read, update, and delete o ...