询问线段树2 下传懒标记的操作
查看原帖
询问线段树2 下传懒标记的操作
376347
住在隔壁小莘楼主2022/10/27 20:38

对于好久不写线段树的乘法,发现今天重新写线段树2发现了一些搞不懂的东西。

void spread(int l,int r,int k){
	if((v[k].mul&&v[k].mul!=1)||v[k].add){
   //正常AC代码是没有这个特判的
	int mid=(l+r)>>1;
	v[k<<1].val=(v[k].mul*v[k<<1].val+(v[k].add*(mid-l+1))%mod)%mod;
	v[k<<1|1].val=(v[k].mul*v[k<<1|1].val+(v[k].add*(r-mid))%mod)%mod;
	v[k<<1].mul=(v[k].mul*v[k<<1].mul)%mod;
	v[k<<1|1].mul=(v[k].mul*v[k<<1|1].mul)%mod;
	v[k<<1].add=(v[k].add+(v[k<<1].add*v[k].mul)%mod)%mod;
	v[k<<1|1].add=(v[k].add+(v[k<<1|1].add*v[k].mul)%mod)%mod;
	v[k].mul=1,v[k].add=0;
	}
} 

对于这个特判,我觉得可有可无,毕竟进入下传懒标记 要是乘法的懒标记大于 1 那么肯定得下传或者是 加法的懒标记大于 0 。所以在这里加与不加这个特判应该都是能过得,但是交上去却过不了,向大佬们询问下原因(●'◡'●)

2022/10/27 20:38
加载中...