60pts 的同学们看这里 / pushdown 问题提醒
查看原帖
60pts 的同学们看这里 / pushdown 问题提醒
525682
QQzhi楼主2024/11/27 12:55

我猜你 60pts 的原因是:下传(pushdown)区间修改标记后,没顺手下传区间加法标记

修改前:(注:t为加法标记,tt为修改标记)

void pushdown(int id){
  if (tt[id]<+oo){
    tt[id*2]=tt[id*2+1]=tt[id];
    t[id*2]=t[id*2+1]=0;
    a[id*2]=a[id*2+1]=tt[id];
    tt[id]=+oo;
  }else{
    t[id*2]+=t[id];
    t[id*2+1]+=t[id];
    a[id*2]+=t[id];
		a[id*2+1]+=t[id];
    t[id]=0;
  }
}

修改后:

void pushdown(int id){
	if (tt[id]<+oo){
		tt[id*2]=tt[id*2+1]=tt[id];
		t[id*2]=t[id*2+1]=0;
		a[id*2]=a[id*2+1]=tt[id];
		tt[id]=+oo;
	}
  t[id*2]+=t[id];
  t[id*2+1]+=t[id];
  a[id*2]+=t[id];
  a[id*2+1]+=t[id];
  t[id]=0;
}
2024/11/27 12:55
加载中...