如果你线段树打区间加标记&&全WA&&不是标记永久化
查看原帖
如果你线段树打区间加标记&&全WA&&不是标记永久化
1037830
Ooj_bai楼主2024/11/13 21:45

如如下线段树代码中的合并部分,x,y为正在处理的区间,注意到x,y可能同时为0,直接打标记是不可取的。

if(!x||!y){
	if(x){
	t[x].maxx+=max2;
		t[x].lazy+=max2;	
	}else{
		x=y;
		t[x].maxx+=max1;
		t[x].lazy+=max1;
	}
	return;
}

改为

if(!x||!y){
	if(x){
		t[x].maxx+=max2;
		t[x].lazy+=max2;	
	}else{
		x=y;
		if(x){
			t[x].maxx+=max1;
			t[x].lazy+=max1;
		}
	}
	return;
}

即可,顺手提供一点样例,不太有强度,但也许可以帮到你。

input1:
6
6 6 2 3 3 2 
1
1
3
3
2

output1:5

input2:
6
3 5 5 1 1 2 
1
1
1
1
4

output2:5

input3:
6
2 4 6 4 1 6 
1
1
1
4
4

output3:5

2024/11/13 21:45
加载中...