社区讨论

警示后人

P6242【模板】线段树 3(区间最值操作、区间历史最值)参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lzmd6hz7
此快照首次捕获于
2024/08/09 15:07
2 年前
此快照最后确认于
2024/08/09 15:47
2 年前
查看原帖
由于吉司机线段树的时间复杂度基于势能分析,所以 update_min 函数的错误可能引起 #9 #10 的 TLE,从而得到 80pts 的分数。
本人的错误在于对严格次大值的更新,错误:
CPP
s[x].maxse=max(min(s[x<<1].maxx,s[x<<1|1].maxx),max(s[x<<1].maxse,s[x<<1|1].maxse));//maxx 为最大值,maxse为次大值
这样做可能由于两子树最大值相同而导致错误,正确写法应该进行逐一判断:
CPP
if(s[x<<1].maxx<s[x<<1|1].maxx) s[x].maxse=s[x<<1].maxx;
else if(s[x<<1].maxx>s[x<<1|1].maxx) s[x].maxse=s[x<<1|1].maxx;
else s[x].maxse=max(s[x<<1].maxse,s[x<<1|1].maxse);
80->100。

回复

2 条回复,欢迎继续交流。

正在加载回复...