提醒
查看原帖
提醒
286239
ql12345楼主2020/8/24 17:21

楼主经历过过不了样例和10分

说明:楼主是用树剖写的

(本人的)原因都一样:取相反数修改的时候混了

先看错误代码(没啥特殊之处,不用认真看):

#define pd(p) pushdown(p)
il void pushdown(re int p){
	if(t[p].tag){
		t[ls].sum=-t[ls].sum;
		t[rs].sum=-t[rs].sum;
		t[ls].Min=-t[ls].Max;
		t[ls].Max=-t[ls].Min;
		t[rs].Min=-t[rs].Max;
		t[rs].Max=-t[rs].Min;
		t[ls].tag=1-t[ls].tag;
		t[rs].tag=1-t[rs].tag;
		t[p].tag=1-t[p].tag;
	}
}

错误原因:修改完t[ls].Min之后又用它去更新t[ls].Max,应该用修改之前的更新(这里写错可以过样例,得10分)

正确代码(如果错误原因看懂了可以不看):

#define pd(p) pushdown(p)
il void pushdown(re int p){
	if(t[p].tag){
		t[ls].sum=-t[ls].sum;
		t[rs].sum=-t[rs].sum;
		int Min=t[ls].Min;t[ls].Min=-t[ls].Max;
		t[ls].Max=-Min;
		Min=t[rs].Min;t[rs].Min=-t[rs].Max;
		t[rs].Max=-Min;
		t[ls].tag=1-t[ls].tag;
		t[rs].tag=1-t[rs].tag;
		t[p].tag=1-t[p].tag;
	}
}
2020/8/24 17:21
加载中...