题解 P8120 「RdOI R3.5」RMSQ

首先想这个排列怎么用,发现可以将 $a_i$ 改为 $a_i$ 在 $b$ 中的下标,查询变成区间最长子序列,满足连续递增。

有很显然的 dp $f_i=f_{lst_{a_i-1}}+1$,$lst_{a_i}$ 表示 $a_i$ 最后出现位置。

考虑莫队,右端点加入是简单的,删除是困难的,考虑不删除莫队,记 $g_i$ 表示以值 $i$ 开始的最长子序列长度,右端点每次加入时贡献到 $g_{a_i-f_i+1}$ 上,左端点加入时直接令 $ans=\max(ans,g_{a_i+1})$ 并更新 $g_{a_i}$,$O(n\sqrt q)$。

强制在线,考虑分块。整块之间答案预处理,散块内部直接暴力。散块对整块,对块 $j$ 预处理出 $[s_{j},i]$ 和 $[i,t_{j}]$ 的答案。散块对散块,类似回滚莫队做法,利用右散块每个数的答案贡献到初始值的位置,扫左散块同时更新,令 $B=\sqrt n$,时间复杂度 $O(n\sqrt n+q\sqrt n)$,空间复杂度 $O(n\sqrt n)$,好像不太卡常。

posted @ 2023-05-13 13:31  Terac  阅读(24)  评论(0)    收藏  举报  来源