差分+简单数学即可.
首先有个性质:
两条链相交等价于其中一条链的
\(LCA\)在另一条链上.
于是我们就对每一条链的
\(LCA\)都加
\(1\).
最后查询每一条链的区间和即可.树剖实现.
但这样我们会算重复,就是说
\((a,b)\)两条链相交我们会算
\((a,b)\)一次,
\((b,a)\)一次.
也就是说我们算出的是有序数对.容斥掉即可.(没有公式,直接减掉一半即可.)
\(Code:\) #include #include #include #include #include #include #include #include #include #include #include