警示后人
查看原帖
警示后人
762588
Edgebright楼主2023/5/13 21:57

如果你是按删除时间t排序后,做两次cdq,
由于cdq会对数组排序,再次按同样的方式排序不代表前后序列完全相同,所以无法起到两次cdq互补的效果。建议把数组直接复制一份。例如:

sort( dt + 1, dt + n + 1 );
cdq(1, n, 1);
sort( dt + 1, dt + n + 1 );
cdq(1, n, 0);

就应该改成:

sort( dt + 1, dt + n + 1 );
for(int i=1;i<=n;++i)
{
	cpy[i] = dt[i];
}
cdq(1, n, 1);
for(int i=1;i<=n;++i)
{
	dt[i] = cpy[i];
}
cdq(1, n, 0);
2023/5/13 21:57
加载中...