我猜你 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;
}