又来了个维护方差的线段树。。。。

大致推导过程(字丑多包涵QAQ)

注意取模时要加一些100000007防止出现负数。。

#include<cstdio>
#include<iostream>
#define ll long long
#define R register long long
#define ls (tr<<1)
#define rs (tr<<1|1)
using namespace std;
const long long M=;
int n,m;
inline ll g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
ll sum[],po[];
void build(int tr,int l,int r) {
if(l==r) {sum[tr]=g(),po[tr]=sum[tr]*sum[tr]; return;}
R md=(l+r)>>;
build(ls,l,md),build(rs,md+,r);
sum[tr]=sum[ls]+sum[rs],po[tr]=po[ls]+po[rs];
}
void add(int tr,int l,int r,int pos,ll d) {
if(l==r) {sum[tr]=d%M; po[tr]=d*d%M; return ;}
R md=(l+r)>>;
if(pos>md) add(rs,md+,r,pos,d);
else if(pos<md+) add(ls,l,md,pos,d);
sum[tr]=(sum[ls]+sum[rs])%M,po[tr]=(po[ls]+po[rs])%M;
}
ll query(int tr,int l,int r,int LL,int RR) {
if(l==LL&&r==RR) return sum[tr];
R md=(l+r)>>;
if(LL>md) return query(rs,md+,r,LL,RR);
else if(RR<md+) return query(ls,l,md,LL,RR);
else return (query(ls,l,md,LL,md)+query(rs,md+,r,md+,RR))%M;
}
ll _query(int tr,int l,int r,int LL,int RR) {
if(l==LL&&r==RR) return po[tr];
R md=(l+r)>>;
if(LL>md) return _query(rs,md+,r,LL,RR);
else if(RR<md+) return _query(ls,l,md,LL,RR);
else return (_query(ls,l,md,LL,md)+_query(rs,md+,r,md+,RR))%M;
}
inline ll qpow(int a) {
R ret=,p=M-; a%=M;
for(;p;p>>=,(a*=a)%=M) if(p&) (ret*=a)%=M;
return ret;
}
inline ll Inv(int x) {
if(x==) return ; if(x<) return ;
return (M-M/x)*Inv(M%x)%M;
}
signed main() {
n=g(),m=g();
build(,,n);
for(R i=;i<=m;++i) {
R k=g(),l=g(),r=g();
if(k&) add(,,n,l,r);
else {
R inv=Inv(r-l+),ave=query(,,n,l,r)*inv%M;
printf("%lld\n",((_query(,,n,l,r)%M-(ave<<)*query(,,n,l,r)%M+M)*inv%M+ave*ave%M+M)%M);
}
}
}

也可树状数组,就不多说了(自己没写)(怕是树状数组更易写?)


2019.04.12

luogu P5142 区间方差 十分优美的线段树的更多相关文章

  1. Luogu 3373 又乘又加的线段树

    Luogu 3373 又乘又加的线段树 当给一个节点加上一个加法标记时,直接把加法标记 += 新值: 当给一个节点加上一个乘法标记时,把乘法标记和加法标记同时 *= 新值.(注意pushdown函数中 ...

  2. luogu P3834 【模板】可持久化线段树 1(主席树) 查询区间 [l, r] 内的第 k 小/大值

    ————————————————版权声明:本文为CSDN博主「ModestCoder_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https:// ...

  3. Luogu 45887 全村最好的嘤嘤刀(线段树 树状数组)

    https://www.luogu.org/problemnew/show/T45887 题目背景 重阳节到了,我们最好的八重樱拥有全村最好的嘤嘤刀…… 题目描述 在绯玉丸力量的影响下,八重村成了一条 ...

  4. Codeforces 719E [斐波那契区间操作][矩阵快速幂][线段树区间更新]

    /* 题意:给定一个长度为n的序列a. 两种操作: 1.给定区间l r 加上某个数x. 2.查询区间l r sigma(fib(ai)) fib代表斐波那契数列. 思路: 1.矩阵操作,由矩阵快速幂求 ...

  5. bzoj 3196 && luogu 3380 JoyOI 1730 二逼平衡树 (线段树套Treap)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3196 题面; 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Se ...

  6. zoj3299 线段树区间更新,坐标建立线段树的方式

    /* 平台和砖块的坐标离散化,边缘坐标转换成单位长度 处理下落信息,sum数组维护区间的砖块数量 把平台按高度从高到低排序,询问平台区间的砖块有多少,询问后将该区域砖块数置0 */ #include& ...

  7. 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间合并(单点更新、区间查询)

    P4513 小白逛公园 题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩 ...

  8. ACM学习历程—HDU5696 区间的价值(分治 && RMQ && 线段树 && 动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=5696 这是这次百度之星初赛2B的第一题,但是由于正好打省赛,于是便错过了.加上2A的时候差了一题,当时有思路,但 ...

  9. 【树状数组区间修改区间求和】codevs 1082 线段树练习 3

    http://codevs.cn/problem/1082/ [AC] #include<bits/stdc++.h> using namespace std; typedef long ...

随机推荐

  1. Arc082_F Sandglass

    Description有一个沙漏由两个上下相通玻璃球$A$和$B$构成,这两个玻璃球都含有一定量的沙子,我们暂且假定$A,B$中位于上方的玻璃球的为$U$,下方的玻璃球为$L$,则除非$U$中没有沙子 ...

  2. pytorch 调用forward 的具体流程

    forward方法的具体流程: 以一个Module为例:1. 调用module的call方法2. module的call里面调用module的forward方法3. forward里面如果碰到Modu ...

  3. Oracle 12C 新特性之在线重命名、迁移活跃的数据文件

    Oracle 数据库 12c 版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤,可以使用 ALTER DATABASE MOVE DATAFILE 这样的 SQL 语句对数据文件进行在线重命名和移 ...

  4. http之pragma

    关于Pragma:no-cache,跟Cache-Control: no-cache相同.Pragma: no-cache兼容http 1.0 ,Cache-Control: no-cache是htt ...

  5. python中文件打开的各个标识含义

    w代表清空后写入 r代表打开后追查 +代表可以写 b代表二进制写入

  6. yum配置文件位置

    centos的yum配置文件 cat /etc/yum.conf cachedir=/var/cache/yum //yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/ ...

  7. 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)

    一.标题:正则表示     正则表达式表示了串的某种规则或规律.恰当地使用正则表达式,可以使得代码简洁.事半功倍.java的很多API都支持正则表达式作为参数.其中的String.split就是这样. ...

  8. Tomcat 服务器详解

    工具/原料 1.JDK:版本为jdk-7-windows-i586.exe  下载地址   http://www.oracle.com/technetwork/java/javase/download ...

  9. AlteraFPGA使用通用SPIFlash - 张亚群的技术专栏 - 博客频道 - CSDN.NET

    AlteraFPGA使用通用SPIFlash - 张亚群的技术专栏 - 博客频道 - CSDN.NET Altera器件有EPCS系列配置器件,其实,这些配置器件就是我们平时通用的SPIFlash,据 ...

  10. idea2016 64位 安装,jdk环境变量配置

      idea 激活服务器地址: 地址1: http://www.iteblog.com/idea/key.php     地址2:  http://idea.qinxi1992.cn/ intelli ...