「JOI 2024 Final」礼物交换

link

考虑单次询问怎么做。

不难发现这是一个二分图匹配,左部点 $i$ 可以匹配到右部点 $j$ 当且仅当 $A_i\ge B_j\and i\neq j$。

不妨设 $B$ 递增,这当然可以通过排序实现。

什么时候不存在完美匹配呢?就是存在左部点 $i$,$i$ 只能匹配到右部点 $[1,i-1]$(也就是说 $A_i<B_{i+1}$,根据定义它不能匹配到自己),而且左部点 $1,2,\dots,i-1$ 也只能匹配到 $[1,i-1]$。这是充要条件,证明留作习题。(使用 Hall 定理)

暴力实现 $O(Qn\log n)$,这样我们可以拿到一半的分数。

接下来是一些(麻烦的)数据结构技巧。

仔细研究上述限制条件。如果我们把 $[B_i,A_i]$ 看成区间,那么 $i$ 不合法当且仅当 $[B_i,A_i]$ 和任意 $[B_j,A_j](j\in[L,R])$ 都没有交。(它被孤立了)

可以算出 $f_i$ 代表最大的 $j<i$ 满足 $[B_j,A_j]\cap[B_i,A_i]\neq\varnothing$,$g_i$ 代表最小的 $j>i$ 满足 $[B_j,A_j]\cap[B_i,A_i]\neq\varnothing$。

这个用一个区间覆盖区间查的线段树就能算出来。

那么问询 $L,R$ 不合法当且仅当存在 $i\in [L,R]$ 满足 $[f_i+1,g_i-1]\supset [L,R]$,这个等价于 $L\in [f_i+1,i]\and R\in[i,g_i-1]$。

这是矩形加单点查,扫描线 + BIT 即可。

这样就做完了,时间复杂度一只 $\log$。

code

posted @ 2024-02-08 23:40  TianyiLemon  阅读(194)  评论(0)    收藏  举报