社区讨论
警示后人:如果你 WA*2
AT_abc266_h[ABC266Ex] Snuke Panic (2D)参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mitzvrd4
- 此快照首次捕获于
- 2025/12/06 15:51 2 个月前
- 此快照最后确认于
- 2025/12/08 17:15 2 个月前
一句话概括:快速排序是不稳定排序。
如果你的 cdq 是这么写的:
CPPvoid cdq(int l,int r){
if(l == r){
a[l].ans += a[l].a;
return;
}
int mid = (l + r) >> 1;
cdq(l,mid);
// ...
sort(a + l,a + r + 1,cmp);
cdq(mid + 1,r);
}
而且你的
CPPcmp 函数是这么写的:bool cmp(node a,node b){
if(a.y != b.y)return a.y < b.y;
return a.t < b.t;
}
这样就有可能会寄掉。因为快速排序的不稳定性,我们有可能会把一个原本在
mid 后面的 a 放到 mid 前面,从而漏更新一些 DP 值。解决方法有两个:
-
把
sort换成stable_sort。 -
把
cmp函数换成下面这样:
bool cmp(node a,node b){
if(a.y != b.y)return a.y < b.y;
if(a.t != b.t)return a.t < b.t;
return a.x < b.x;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...