【LOJ3043】「ZJOI2019」线段树
问题可以转化为每次区间覆盖操作有 \(\frac{1}{2}\) 的概率进行,求标记和的期望。于是我们只要求出所有点有标记的概率即可。
我们设 \(f_i\) 表示节点 \(i\) 有标记的概率, \(g_i\) 表示节点 \(i\) 的祖先节点有标记的概率。如果一个节点未完全被包含,那么其未被包含的节点是否有标记取决于其祖先节点是否有标记,故要用来自祖先节点的信息来更新答案(设未包含的节点为 \(j\) ,那么 \(f_j \leftarrow \frac{f_j+g_j}{2}\) )。如果一个节点被完全包含,那么 \(f_i \leftarrow \frac{f_i+1}{2}\) ,其所有子节点(包括自己) \(g_j \leftarrow \frac{g_j+1}{2}\) ; 否则因为当前到达的区间标记已被下传,所以 \(f_i\leftarrow \frac{f_i}{2}, g_i\leftarrow \frac{g_i}{2}\) 。 线段树维护 \(f_i,g_i\) , \(g_i\) 的维护需要打标记。
#include<cstdio>
#include<cassert>
inline int gi()
{
char c=getchar(); int x=0;
for(;c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+c-'0';
return x;
}
const int N=2e5+5,Mod=998244353,inv=Mod+1>>1;
int n,m,f[N<<2],g[N<<2],sum[N<<2],tg1[N<<2],tg2[N<<2],fm=1;
#define lx (x<<1)
#define rx (x<<1|1)
#define mul(x,y) (1ll*(x)*(y)%Mod)
#define div2(x) (1ll*(x)*inv%Mod)
void pushdown(int x)
{
if(tg1[x]==1&&tg2[x]==0) return ;
tg1[lx]=mul(tg1[lx],tg1[x]),tg1[rx]=mul(tg1[rx],tg1[x]);
tg2[lx]=(mul(tg2[lx],tg1[x])+tg2[x])%Mod;
tg2[rx]=(mul(tg2[rx],tg1[x])+tg2[x])%Mod;
g[lx]=(mul(g[lx],tg1[x])+tg2[x])%Mod;
g[rx]=(mul(g[rx],tg1[x])+tg2[x])%Mod;
tg1[x]=1,tg2[x]=0;
}
void solve(int x)
{
f[x]=div2((f[x]+g[x])%Mod);
sum[x]=((sum[lx]+sum[rx])%Mod+f[x])%Mod;
}
void update(int x, int l, int r, int sl, int sr)
{
if(sl<=l&&r<=sr)
{
f[x]=div2(f[x]+1);
g[x]=div2(g[x]+1);
sum[x]=((sum[lx]+sum[rx])%Mod+f[x])%Mod;
tg1[x]=div2(tg1[x])%Mod;
tg2[x]=(div2(tg2[x])+inv)%Mod;
return ;
}
pushdown(x);
f[x]=div2(f[x]),g[x]=div2(g[x]);
int mid=l+r>>1;
if(sl>mid)
update(rx,mid+1,r,sl,sr),solve(lx);
else if(sr<=mid)
update(lx,l,mid,sl,sr),solve(rx);
else update(lx,l,mid,sl,sr),update(rx,mid+1,r,sl,sr);
sum[x]=((sum[lx]+sum[rx])%Mod+f[x])%Mod;
}
int main()
{
n=gi(),m=gi();
for(int i=1;i<=(n<<2);++i) tg1[i]=1;
while(m--)
{
int op=gi();
if(op==2) printf("%d\n",1ll*fm*sum[1]%Mod);
else
{
fm=2ll*fm%Mod;
int l=gi(),r=gi();
update(1,1,n,l,r);
}
}
}
【LOJ3043】「ZJOI2019」线段树的更多相关文章
- 【LOJ】#3043. 「ZJOI2019」线段树
LOJ#3043. 「ZJOI2019」线段树 计数转期望的一道好题-- 每个点设两个变量\(p,q\)表示这个点有\(p\)的概率有标记,有\(q\)的概率到祖先的路径上有个标记 被覆盖的点$0.5 ...
- 「ZJOI2019」线段树 解题报告
「ZJOI2019」线段树 听说有人喷这个题简单,然后我就跑去做,然后自闭感++,rp++(雾) 理性分析一波,可以发现最后形成的\(2^k\)个线段树,对应的操作的一个子集,按时间顺序作用到这颗线段 ...
- LOJ 3043: 洛谷 P5280: 「ZJOI2019」线段树
题目传送门:LOJ #3043. 题意简述: 你需要模拟线段树的懒标记过程. 初始时有一棵什么标记都没有的 \(n\) 阶线段树. 每次修改会把当前所有的线段树复制一份,然后对于这些线段树实行一次区间 ...
- 「ZJOI2019」线段树
传送门 Description 线段树的核心是懒标记,下面是一个带懒标记的线段树的伪代码,其中 tag 数组为懒标记: 其中函数\(Lson(Node)\)表示\(Node\)的左儿子,\(Rson( ...
- @loj - 3043@「ZJOI2019」线段树
目录 @description@ @solution@ @accepted code@ @details@ @description@ 九条可怜是一个喜欢数据结构的女孩子,在常见的数据结构中,可怜最喜 ...
- 「模板」 线段树——区间乘 && 区间加 && 区间求和
「模板」 线段树--区间乘 && 区间加 && 区间求和 原来的代码太恶心了,重贴一遍. #include <cstdio> int n,m; long l ...
- Loj #2570. 「ZJOI2017」线段树
Loj #2570. 「ZJOI2017」线段树 题目描述 线段树是九条可怜很喜欢的一个数据结构,它拥有着简单的结构.优秀的复杂度与强大的功能,因此可怜曾经花了很长时间研究线段树的一些性质. 最近可怜 ...
- @loj - 2093@ 「ZJOI2016」线段树
目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 Yuuka 遇到了一个题目:有一个序列 a1,a2,..., ...
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
随机推荐
- 敏感、脆弱,OLED柔性屏会带给制造业怎样的灾难?
智能手机市场已经有些意兴阑珊,大家创新的点子在过去十年逐一亮剑,也带来了一些革命,现在谈到智能手机硬件,只能是更大的屏幕.更大的电池,更高的摄像头像素等等,长期的创新乏力,已经让消费者失去" ...
- Graphviz 使用笔记
官网:Graphviz 最近一直在找如何用写代码的方式就可以实现数据结构可视化.流程图等等,于是发现了她,上手也比较简单,但正当我仅觉得不错的时候,我发现竟然还可以用python来写,瞬间好感度爆满啊 ...
- Java - 使用hibernate配置文件 + JPA annotation注解操作数据库
本程序运行环境:IDEA. 实际上我对hiberbate与注解的关系还不是太清晰.据我所知注解都是Java JPA的,那么我的理解是:hibernate就应该只是通过这些JPA标识及hibernate ...
- Lightroom中几个重要名词术语的解释
Lightroom是照片管理.处理.发布的综合性智能软件,里面有几个重要的专有技术名词,通过我的理解做一个总结: 一.目录(Catalog) 就是Lightroom的数据库,会把用户的照片的信息.照片 ...
- 浅谈脱壳中的附加数据问题(overlay)
Author:Lenus -------------------------------------------------- 1.前言 最近,在论坛上看到很多人在弄附加数据overlay的问题,加上 ...
- JS实现深拷贝,浅拷贝的方法
在 JS 中,函数和对象都是浅拷贝(地址引用):其他的,例如布尔值.数字等基础数据类型都是深拷贝(值引用). 深拷贝 JSON.parse(JSON.stringify(src)):这种方法有局限性, ...
- axios发送post请求node服务器无法通过req.body获取参数
问题: 项目前端使用Vue框架,后端使用node.js搭建本地服务器.前端通过 axios 方式请求后端数据的过程中,发现如果是 get 请求,服务器端能够通过 req.query 获取前端传递的参数 ...
- 《React后台管理系统实战 :二》antd左导航:cmd批量创建子/目录、用antd进行页面布局、分离左导航为单独组件、子路由、动态写左导航、css样式相对陷阱
一.admin页面布局及路由创建 0)cmd批量创建目录及子目录 //创建各个目录,及charts和子目录bar md home category product role user charts\b ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:表示成功的操作
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Go语言 | 哪些大公司在用go语言?
Go大概09年面世以来,已经8年了,也算是8年抗战.在这8年中,已经有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer.k8s等,现在我 ...