QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: xcx0902

Posted at: 2026-04-16 19:33:44

Last updated: 2026-04-16 19:33:51

Back to Problem

New Editorial for Problem #3511

一个鱼想要赢,肯定是不断吃左右的鱼,直到两边的鱼大小都大于它。

对于一个区间 $[l,r]$,考虑需要维护的信息:

  • 这个区间的答案
  • 能够达到该区间左端点的鱼个数,以及对应的能够达到的区间
  • 能够达到该区间右端点的鱼个数,以及对应的能够达到的区间
  • (最后两种均不包括可达整个区间的鱼)

可以发现,第二种和第三种信息对应的可能的区间数量不超过 $O(\log V)$。这是因为,较长区间必然是较短区间的至少两倍。

合并两个区间 $[l,m]+[m+1,r]$ 时,考虑区间 $[l,m]$ 中鱼的扩展情况($[m+1,r]$ 同理)。

设 $[l,m]$ 中能到达 $m$ 的鱼最终到达的区间可能为 $[L_1,m],[L_2,m],\dots,[L_c,m](L_1>L_2>\dots>L_c)$。

对于可达 $r$ 的贡献:对于 $[L_i,m]$ 可以扩张到 $r$ 的 $i$,求出 $[L_i,r]$ 最多能向左扩展到的区间 $[L_p,r]$,则所有满足 $i\le k\le p$ 的 $[L_k,m]$ 都对 $[L_p,r]$ 有贡献。

对于可达 $l$ 的贡献:找到最小的 $i$ 使得 $[L_i,m]$ 可以扩张到 $l$,设它最多能向右扩展到 $x$,则所有满足 $i \le k \le c$ 的 $[L_k,m]$ 都对 $[l,x]$ 有贡献。

有了这些,容易统计出合并后可达整个区间的鱼个数,即该区间答案。

上述过程均可避免使用二分,而使用双指针维护。

Comments

No comments yet.