luogu P5142 区间方差 十分优美的线段树
又来了个维护方差的线段树。。。。
大致推导过程(字丑多包涵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 区间方差 十分优美的线段树的更多相关文章
- Luogu 3373 又乘又加的线段树
Luogu 3373 又乘又加的线段树 当给一个节点加上一个加法标记时,直接把加法标记 += 新值: 当给一个节点加上一个乘法标记时,把乘法标记和加法标记同时 *= 新值.(注意pushdown函数中 ...
- luogu P3834 【模板】可持久化线段树 1(主席树) 查询区间 [l, r] 内的第 k 小/大值
————————————————版权声明:本文为CSDN博主「ModestCoder_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https:// ...
- Luogu 45887 全村最好的嘤嘤刀(线段树 树状数组)
https://www.luogu.org/problemnew/show/T45887 题目背景 重阳节到了,我们最好的八重樱拥有全村最好的嘤嘤刀…… 题目描述 在绯玉丸力量的影响下,八重村成了一条 ...
- Codeforces 719E [斐波那契区间操作][矩阵快速幂][线段树区间更新]
/* 题意:给定一个长度为n的序列a. 两种操作: 1.给定区间l r 加上某个数x. 2.查询区间l r sigma(fib(ai)) fib代表斐波那契数列. 思路: 1.矩阵操作,由矩阵快速幂求 ...
- bzoj 3196 && luogu 3380 JoyOI 1730 二逼平衡树 (线段树套Treap)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3196 题面; 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Se ...
- zoj3299 线段树区间更新,坐标建立线段树的方式
/* 平台和砖块的坐标离散化,边缘坐标转换成单位长度 处理下落信息,sum数组维护区间的砖块数量 把平台按高度从高到低排序,询问平台区间的砖块有多少,询问后将该区域砖块数置0 */ #include& ...
- 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间合并(单点更新、区间查询)
P4513 小白逛公园 题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩 ...
- ACM学习历程—HDU5696 区间的价值(分治 && RMQ && 线段树 && 动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=5696 这是这次百度之星初赛2B的第一题,但是由于正好打省赛,于是便错过了.加上2A的时候差了一题,当时有思路,但 ...
- 【树状数组区间修改区间求和】codevs 1082 线段树练习 3
http://codevs.cn/problem/1082/ [AC] #include<bits/stdc++.h> using namespace std; typedef long ...
随机推荐
- FIS 雪碧图sprite合并
1 安装fis(必须先安装node和npm):npm install -g fis3 2 构建项目发布到根目录下的output:fis3 release -d ./output 项目根目录:FIS3 ...
- telnet IP:ERROR
实验环境:CentOS6.8 主机:172.16.xxx.xxx:80 客户端:172.16.xxx.xxx [root@www ~18:32:27]#telnet 172.16.xxx.xxx 80 ...
- Java探索之旅(6)——对象和类
1.知识要点 假设: public ClassName{ int data; String name; ClassName(){data=1;} public static ...
- JavaScript代码存在形式
<!-- 方式一 --> <script type"text/javascript" src="JS文件"></script> ...
- badblocks 检查磁盘损坏的区块
Linux badblocks命令用于检查磁盘装置中损坏的区块. 语法: badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数] ...
- Mysql 增量备份和全量备份
全量备份: # vim /root/DBFullyBak.sh //添加以下内容 #!/bin/bash # Program # use mysqldump to Fully backup mysql ...
- js验证文本框数字
输入框 <input name="title" type="text" oninput="onlyNum(this,'')" titl ...
- 项目一:第六天 WebService写接口 和CXF框架
1 课程计划 1. webService入门(了解) 2. 基于jdk1.7开发webservice服务(了解) 3. Apache CXF框架入门(掌握) 4. 基于CXF框架搭建CRM系统(掌握) ...
- 项目一:第五天 1、区域数据(pinyin4j-简码,城市编码) 2、Web层代码重构(model对象,分页代码提取) 3、区域分页查询 3、分区添加功能 4、定区管理管理-添加,分页
Service: /** * @Description: 1.保存定区 2.让分区关联定区 * 对象三种状态 1.持久态(被session管理对象-一级缓存中有对象) 2.托管态(有OID标识,数据 ...
- OpenGL — GLFW — 颜色
OpenGL - GLFW - 颜色 参考教程:https://learnopengl-cn.readthedocs.io/zh/latest/02%20Lighting/01%20Colors/ 既 ...