如果你是按删除时间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);