luogu P5142 区间方差(线段树、乘法逆元)
luogu P5142 区间方差
可以发现,我们只需要维护序列的区间和和区间平方和,就可以维护平均数和方差。
题目要求分数取模, 所以我们使用乘法逆元即可。
最终答案为
psum−sum2n%mod\frac {psum - sum^2}{n}\%modnpsum−sum2%mod
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define get_mod(x) (x % mod + mod ) % mod
using namespace std;
typedef long long ll;
const int N = 500007, mod = 1e9 + 7;int n, m;
int a[N];
int cnt;int qpow(int b, int p = mod - 2, int m = mod)
{//快速幂用于费马小定理求乘法逆元b %= m;int res = 1 % m;for(; p; p >>= 1, b = (ll)b * b % m)if(p & 1)res = (ll)res * b % m;return res;
}namespace tree
{#define get_powsum(x) ((ll)(x)*(x)%mod) //!struct tree{int l, r;int sum, psum;//int lz;}tr[N];inline void pushup(int p){tr[p].sum = (tr[p << 1].sum + tr[p << 1 | 1].sum) % mod;tr[p].psum = (tr[p << 1].psum + tr[p << 1 | 1].psum) % mod;}void build(int p, int l, int r){tr[p] = {l, r};if(l == r){tr[p].sum = a[r] % mod;tr[p].psum = get_powsum(a[r]) % mod;return ;}int mid = l + r >> 1;build(p << 1, l, mid), build(p << 1 | 1, mid + 1, r);pushup(p);}void modify(int p, int x, int k){if(tr[p].l == tr[p].r){tr[p].sum = k % mod;tr[p].psum = get_powsum(k) % mod;return ;}int mid = tr[p].l + tr[p].r >> 1;if(x <= mid)modify(p << 1, x, k);else modify(p << 1 | 1, x, k);pushup(p);}int query_sum(int p, int l, int r){if(tr[p].l >= l && tr[p].r <= r){return tr[p].sum % mod;}int mid = tr[p].l + tr[p].r >> 1;int res = 0;if(l <= mid)res = query_sum(p << 1, l, r) % mod;if(r > mid)res = (1ll * res + query_sum(p << 1 | 1, l, r)) % mod;return res % mod;}int query_psum(int p, int l, int r){if(tr[p].l >= l && tr[p].r <= r){return tr[p].psum % mod;}int mid = tr[p].l + tr[p].r >> 1;int res = 0;if(l <= mid)res = query_psum(p << 1, l, r) % mod;if(r > mid)res = (1ll * res + query_psum(p << 1 | 1, l, r)) % mod;return res % mod;}
}int sum, psum, inv, ave, ans;int main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++ i)scanf("%d", &a[i]);tree::build(1, 1, n);for(int i = 1; i <= m; ++ i){int op, x, y;scanf("%d%d%d", &op, &x, &y);if(op == 1){tree::modify(1, x, y % mod);}else {sum = tree::query_sum(1, x, y % mod) % mod; //区间和psum = tree::query_psum(1, x, y % mod) % mod; //区间平方和inv = qpow(y - x + 1); //区间长度(分母)的逆元ave = (ll)sum * inv % mod;ans = (ll)psum * inv % mod - (ll)ave * ave % mod;ans = get_mod(ans);printf("%d\n", ans);//cout << "ok" << cnt ++ << endl;}}return 0;
}
luogu P5142 区间方差(线段树、乘法逆元)相关推荐
- (树状数组+逆元)洛谷P5142 区间方差
洛谷P5142 区间方差 (^ w ^) 题目背景 出题人并没有能力写有趣的题面-- 题目描述 对于一个长度为n的序列a1,a2,a3⋯ana_1,a_2,a_3\cdots a_na1,a2,a ...
- 27.CF1004F Sonya and Bitwise OR 区间合并线段树
27.CF1004F Sonya and Bitwise OR 区间合并线段树 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 给定序 ...
- luogu P1471 方差 P5142 区间方差
背景: 话说今天晚上就要去丰山那边上课了. 数学竞赛昨天考完了,碰见几个某 J J J中学的朋友(政治敏感话题), 好像看反了题. 又合并了两道题. 题目传送门: https://www.luogu. ...
- P1712-[NOI2016]区间【线段树,尺取法】
正题 题目链接:https://www.luogu.com.cn/problem/P1712 题目大意 nnn个区间,求出其中mmm个区间使得它们有覆盖同一个点且最长区间长度减去最短长度最小. 解题思 ...
- 强制在线带修区间LCM(线段树+质因子状压)
题目链接:信息学奥赛比赛系统 | 强制在线带修区间LCM (qduoj.com) 先说点题外话,这个题目困扰了我一天多,刚ac,真的是太爽了,感觉从这里面学到的东西挺多的,所以就来分享一下. 题目的意 ...
- [ Luogu 3924 ] 康纳的线段树
\(\\\) \(Description\) 现在有一个线段树维护长为\(N\)的数列,实现方式是\(mid=((l+r)>>1)\),支持区间加,节点维护区间和. 共有\(M\)次区间加 ...
- [UOJ #222][NOI2016]区间(线段树)
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- Luogu P1198 [JSOI2008]最大数 线段树
P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...
- 牛客 - 求函数(线段树+区间合并/线段树+矩阵维护)
题目链接:点击查看 题目大意:现在有 n 个函数,每个函数都是诸如 f( x ) = k * x + b 的形式,只是每个函数的 k 和 b 都是相互独立的,现在给出两个操作: 1 pos k b:将 ...
最新文章
- 【Linux】普通用户修改 root 权限文件,没有权限;sudo: 没有终端存在,且未指定 askpass 程序
- K8s Ingress Provider 为什么选择 MSE 云原生网关?
- .Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示
- 智能实验室-全能优化(Guardio) 4.0.0.670 beta 8
- Alluxio完成C轮5000万美元融资,新设中国区总部力拓国内市场
- HDU 1162 Eddy's picture (最小生成树)(java版)
- python爬取歌词_利用Python网络爬虫抓取网易云音乐歌词
- m3u8 video ios h5_移动端H5页面踩坑记
- Maven+SpringMVC+Dubbo 简单的入门demo配置(另一篇)
- java simpedateformat_java中Date,SimpleDateFormat
- 性能测试流程(超级详细)
- python tokenize()_tokenize (Language) – Python 中文开发手册 - Break易站
- 未来科技蒲公英大飞_大烟草的下跌告诉我们关于大科技的未来
- 二三类户开户风险和交易风险再讲
- 牛客剪刀石头布Java 模拟+贪心
- 中国石油大学《混凝土》第二阶段在线作业
- ae教程 (五)滤镜特效 (一)
- 基本shell命令学习
- 编译原理第二版6.2答案
- mysql 中文乱码问题解决(复制粘贴就可以解决)