博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P5111 zhtobu3232的线段树
阅读量:5042 次
发布时间:2019-06-12

本文共 2115 字,大约阅读时间需要 7 分钟。

维护左子树右子树的贡献和跨区间贡献

#include
using namespace std;typedef long long LL;const LL maxn=10000000;const LL inf=2147483646;const LL MOD=998244353;#define md(x) (x=(x>MOD)?x-MOD:x)#define ctwo(x) ((x*(x-1)/2+x)%MOD)#define dec(x) (x=x?x-1:MOD-1)#define inc(x) (x=(x==MOD-1)?0:x+1)inline LL Read(){ LL x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=(x<<3)+(x<<1)+c-'0'; c=getchar(); }return x*f;}struct node{ LL son[2],pre,suf,ans,flag;}tree[maxn];LL n,m,nod,root;inline void mg(node& now,const node& son0,const node& son1){ now.pre=son0.pre+son0.flag*son1.pre; md(now.pre); now.suf=son1.suf+son1.flag*son0.suf; md(now.suf); now.ans=(son0.ans+son1.ans+son0.suf*son1.pre)%MOD; if(now.flag){ if(!(son0.flag&&son1.flag)) inc(now.pre), inc(now.suf), inc(now.ans); } else if(son0.flag&&son1.flag) dec(now.pre), dec(now.suf), dec(now.ans);}inline void Update(LL now,LL son0,LL son1,LL len1,LL len2){ if(len1==0){ tree[now].flag=tree[now].pre=tree[now].suf=tree[now].ans=0; return; } node c1,c2; if(son0) c1=tree[son0]; else{ len1=len1%MOD, c1.ans=ctwo(len1), c1.pre=len1, c1.suf=len1, c1.flag=1; } if(son1) c2=tree[son1]; else{ len2=len2%MOD, c2.ans=ctwo(len2), c2.pre=len2, c2.suf=len2, c2.flag=1; } mg(tree[now],c1,c2);}inline void Change(LL now,LL l,LL r,LL lt,LL rt){ if(lt==l&&rt==r){ tree[now].flag=0, Update(now,tree[now].son[0],tree[now].son[1],(r-l)>>1,(r-l+1)>>1); return; } LL mid=(l+r)>>1; if(mid>lt){ if(!tree[now].son[0]){ tree[now].son[0]=++nod; LL len=(mid-l)%MOD,son0=nod; tree[son0].ans=ctwo(len), tree[son0].pre=len, tree[son0].suf=len, tree[son0].flag=1; } Change(tree[now].son[0],l,mid,lt,min(rt,mid)); } if(mid

转载于:https://www.cnblogs.com/y2823774827y/p/10163381.html

你可能感兴趣的文章
SpringBoot源码解析:AOP思想以及相应的应用
查看>>
神的回帖
查看>>
3149 爱改名的小融 2
查看>>
20189208杨晨曦《移动平台开发实践》第9周学习总结
查看>>
UVa 11636 (注意读题) Hello World!
查看>>
find搜索文件系统,实时搜索
查看>>
【BZOJ3052】[wc2013]糖果公园 带修改的树上莫队
查看>>
Bootstrap 输入组
查看>>
hdu1003(简单dp)
查看>>
hdu3054(斐波那契。。。。找规律)
查看>>
个人博客02
查看>>
Winform架构
查看>>
vim 高级使用技巧第二篇
查看>>
Android 版本问题
查看>>
Vue中设置倒计时
查看>>
LINUX 设置IP地址,并能连接外网
查看>>
前端 MVC 变形记
查看>>
django.db中的transaction
查看>>
mybatis 获取数据库自动生成的主键
查看>>
方法的值传递机制练习
查看>>