P7907-Ynoi2005-rmscne
题意
给出 \(a_{1, \ldots ,n}\),\(Q\) 次询问 \(l,r\) 求长度最短的 \(l\le l^\prime\le r^\prime\le r\) 使得 \(\{ a_{[l,r]} \}=\{ a_{[l^\prime,r^\prime]} \}\)。
思路
这种找一个子区间可以考虑减少一下同时的限制,我们先找到一个 \([p,r]\) 满足上述的限制,然后考虑离线下来扫描线,当前维护一个 \(i,f_i\) 表示 \([i,f_i]\) 可以表示 \([i,r]\) 内的所有元素,那么所有的 \(i\in [l,c]\) 的 \([i,f_i]\) 长度即为答案。
那么我们考虑在 \(r\to r+1\) 时维护这个答案。对于 \(a_{r+1}\),记上一次出现的位置是 \(\mathrm{lst}\),则在 \((\mathrm{lst},r+1]\) 这些位置上 \(a_{r+1}\) 是新出现的,直接将它们的 \(f\) 赋值为 \(r+1\) 即可。
考虑维护 \(p\),还是在更新的时候,考虑 \(\mathrm{lst}\) 已经没有用了,于是我们可以并查集连边 \(\mathrm{lst}\to \mathrm{lst}+1\) 即可。

浙公网安备 33010602011771号