QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: alpha1022

Posted at: 2026-01-28 02:35:37

Last updated: 2026-01-28 02:35:43

Back to Problem

题解

简要题意.

给定 $N$ 和长为 $N$ 的序列 $A_1, A_2, \dots, A_N$,有依次执行的 $Q$ 次单点修改。
在所有修改前和每次修改后,需要输出 $|\{(i,j)\mid A_i = A_j \land (i < k < j \implies A_k < A_i)\}|$。

$N \le 10^5$,$Q \le 2.5\times 10^5$。

显然地,所有数对可以构成一棵树。

按时间分治,设当前在处理 $[s,e]$ 内的修改,我们注意到每个修改会导致树上一条祖先后代链的数对被删除。

假设每次是从一个点 $v$ 往上删到一点 $u$,我们不妨将所有 $u$ 的父亲和所有 $v$ 拿出来建出虚树,其余的边都可以扔掉。

途中需要用线段树来维护新增的数对。

直接实现就是 $O((N+Q)\log^2(N+Q))$ 的。

Comments

No comments yet.