考虑一下只加回滚莫队和普通莫队的复杂度瓶颈。没错,就是查找前驱后继。在一般的情况下,查找前驱后继的复杂度是一个不可省略的 log 。但是我们可以预先把前驱后继维护好。具体而言,我们将只加回滚莫队的 l 指针从当前块右端点向左扫到当前询问左端点,改为从当前块左端点向右扫到当前询问左端点。在将指针复位到当前块左端点时直接将整个块的元素加入链表,并在扫到当前询问左端点的过程中将元素从链表中一一删除。对于右端点同理,排序询问时我们将左端点在同一个块内的询问按右端点降序排序,将当前块右端点到 n 的元素加入链表,之后 r 指针从 n 往当前询问右端点扫,并执行删除操作。由于我们一开始就将所有元素加入了链表,因此在删除一个元素时查询元素的前驱后继的复杂度是 O(1) 的。总复杂度 O(n \sqrt n),可以通过本题。