#线段树,排列组合#洛谷 6108 [Ynoi2009] rprsvq
分析
维护区间和以及区间平方和都比较简单,考虑答案是什么,根据方差公式的变形。
\]
要搭配上排列组合,但是后面这一坨很难求,考虑把二次项拆开,真正的答案就是
\]
设 \(s^2_n=\sum_{i=1}^n a_j^2,(s_n)^2=(\sum_{i=1}^n a_i)^2\)
把前面这个组合数转换一下就是
\]
关键是后面这一坨,因为 \(C(n-2,i-2)C(n,2)=C(n,i)C(i,2)\),所以
\]
也就是
\]
后面这一坨比较难求,可以求导之后再积分,设 \(f(x)=\sum_{i=1}^n\frac{C(n,i)x^i}{i}\)
\]
设 \(y=x+1\),积分就是
\]
最后答案也就是
\]
后面这一坨直接预处理即可
代码
#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=5000011,mod=998244353;
int two[N],inv[N],f[N],lazy[N<<2],n;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
struct rec{
int w0,w1;
inline rec operator +(const rec &t)const{
return (rec){mo(w0,t.w0),mo(w1,t.w1)};
}
}w[N<<2];
inline void ptag(int k,int l,int r,int z){
w[k].w1=mo(mo(w[k].w1,2ll*z*w[k].w0%mod),(r-l+1ll)*z%mod*z%mod);
w[k].w0=mo(w[k].w0,(r-l+1ll)*z%mod),lazy[k]=mo(lazy[k],z);
}
inline void pdown(int k,int l,int mid,int r){
if (lazy[k]){
ptag(k<<1,l,mid,lazy[k]);
ptag(k<<1|1,mid+1,r,lazy[k]);
lazy[k]=0;
}
}
inline void update(int k,int l,int r,int x,int y,int z){
if (l==x&&r==y){
ptag(k,l,r,z);
return;
}
rr int mid=(l+r)>>1; pdown(k,l,mid,r);
if (y<=mid) update(k<<1,l,mid,x,y,z);
else if (x>mid) update(k<<1|1,mid+1,r,x,y,z);
else update(k<<1,l,mid,x,mid,z),update(k<<1|1,mid+1,r,mid+1,y,z);
w[k]=w[k<<1]+w[k<<1|1];
}
inline rec query(int k,int l,int r,int x,int y){
if (l==x&&r==y) return w[k];
rr int mid=(l+r)>>1; pdown(k,l,mid,r);
if (y<=mid) return query(k<<1,l,mid,x,y);
else if (x>mid) return query(k<<1|1,mid+1,r,x,y);
else return query(k<<1,l,mid,x,mid)+query(k<<1|1,mid+1,r,mid+1,y);
}
signed main(){
n=iut(),two[0]=inv[0]=inv[1]=1;
for (rr int i=2;i<=n;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for (rr int i=1;i<=n;++i) two[i]=mo(two[i-1],two[i-1]);
for (rr int i=1;i<=n;++i) f[i]=mo(f[i-1],1ll*(two[i]-1)*inv[i]%mod);
for (rr int i=1;i<=n;++i) f[i]=1ll*mo(two[i]-1,mod-f[i])*inv[i]%mod*inv[i-1]%mod;
for (rr int Q=iut();Q;--Q){
rr int opt=iut(),l=iut(),r=iut(),m=r-l+1;
if (opt==1) update(1,1,n,l,r,iut());
else{
rr rec t=query(1,1,n,l,r);
print(1ll*f[m]*mo(1ll*m*t.w1%mod,mod-1ll*t.w0*t.w0%mod)%mod),putchar(10);
}
}
return 0;
}
#线段树,排列组合#洛谷 6108 [Ynoi2009] rprsvq的更多相关文章
- 如何求先序排列和后序排列——hihocoder1049+洛谷1030+HDU1710+POJ2255+UVA548【二叉树递归搜索】
[已知先序.中序求后序排列]--字符串类型 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在这一周遇到的问题便是:给出一棵二叉树的前序和 ...
- 树状数组 洛谷P3616 富金森林公园
P3616 富金森林公园 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积水也有 ...
- AC日记——【模板】树链剖分 洛谷 P3384
题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式 ...
- LOJ#2983. 「WC2019」数树 排列组合,生成函数,多项式,FFT
原文链接www.cnblogs.com/zhouzhendong/p/LOJ2983.html 前言 我怎么什么都不会?贺忙指导博客才会做. 题解 我们分三个子问题考虑. 子问题0 将红蓝共有的边连接 ...
- 【模板】树的重心 洛谷P1364 医院设置
P1364 医院设置 题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口.圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接 ...
- [洛谷P1198/BZOJ1012][JSOI2008] 最大数 - 树状数组/线段树?
其实已经学了树状数组和线段树,然而懒得做题,所以至今没写多少博客 Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数 ...
- 洛谷P4344 脑洞治疗仪 [SHOI2015] 线段树+二分答案/分块
!!!一道巨恶心的数据结构题,做完当场爆炸:) 首先,如果你用位运算的时候不小心<<打成>>了,你就可以像我一样陷入疯狂的死循环改半个小时 然后,如果你改出来之后忘记把陷入死循 ...
- 牛客网练习赛t2(线段树)
题解: 好像因为他说了 数据范围全部在ll以内 所以直接暴力就可以过了 比较正常是用线段树来维护 洛谷上有道模板题是支持加,乘,区间和 而这题还多了区间平方和的操作 按照那题的操作 我们维护的时候保证 ...
- CSU 2151 集训难度【多标记线段树】
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2151 Input 第一行三个数n,m,v0 表示有n名萌新和m次调整,初始时全部萌新的集训难度 ...
- P1558 色板游戏 状压线段树
P1558 色板游戏 状压线段树 题面 洛谷P1558 每次不同颜色覆盖一段区间,每次询问一段区间有多少种颜色 因为颜色数\(T\)很小,使用二进制表示状态当前区间有那些颜色,二进制第\(i\)位表示 ...
随机推荐
- Python3中的“联动”现象
技术背景 在python中定义一个列表时,我们一定要注意其中的可变对象的原理.虽然python的语法中没有指针,但是实际上定义一个列表变量时,是把变量名指到了一个可变对象上.如果此时我们定义另外一个变 ...
- docker部署fastdfs并在Django中集成
拉取Fastdfs镜像 docker pull delron/fastdfs 构建Tracker容器 是在Linux环境下,使用docker镜像构建tracker容器,用于启动跟踪服务器,起到调度的作 ...
- 用BootstrapBlazor制作修改订单字段的页面
1.在Shared文件夹下新增一个razor 2.页面初始化的时候获取订单信息 准备一个名为OrderId的参数 准备重写页面初始化时的方法 改成异步的形式来重写 4.获取数据 就3行代码. 声明这个 ...
- EL表达式处理字符串
示例 JSP页面页头添加 <%@ taglib uri="/WEB-INF/taglib/c.tld" prefix="c"%> <%@ ta ...
- 【Azure Redis 缓存 Azure Cache For Redis】Redis支持的版本及不同版本迁移风险
问题描述 1. Azure Redis缓存支持的版本包括4.0以及6.0(预览) 这种情形下,可以使用PaaS服务提供的 Azure Redis 缓存(4.0版本).Azure Redis对6.0的支 ...
- 【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found
问题描述 Springboot 集成azure keyvault 报错,代码参考的官方文档:https://docs.microsoft.com/en-us/azure/developer/java/ ...
- 【Azure Redis 缓存】Redis Geo-replication(异地复制)的问题
问题描述 在Azure官网中,已列出了一系列的常规问题:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-geo-repli ...
- Vue3学习(二十二)- 保存文档内容
写在前面 前面已经调整了布局,富文本编辑器也能正确显示了,那么接下来就是怎么把数据保存到数据库里了,那么怎么做呢? 保存文档内容并显示 1.任务拆解 前端获取输入富文本框的html内容 改造保存接口, ...
- Android drawable与mipmap的区别(android资源文件放置位置)
1.Drawable Android 把可绘制的对象抽象为Drawable,不同的图形图像代表着不同的darwable类型, 通常我们在代码中不会直接接触drawable实现类的,是由android ...
- 关于minio Monitoring Metrics面板响应慢的问题
问题: 服务器ip修改之后,打开minio发现面板数据现需要三十多秒才能加载,排除了服务器cpu,内存,磁盘等的问题 原因: 之前配置过amqp监听,因服务器ip变更导致minio连不上rabbitm ...