个人思路:
两回文 \(i,j\) 相交,即 \(l_i \le r_j \land r_i \ge l_j\)
我们从左到右,计算以每个点为中心的回文与之前的点为中心的回文的交点数,可以保证 \(r_i \ge l_j\),相交只需要保证 \(l_i \le r_j\)。
同时对偶回文和奇回文做 manacher,过程中统计当前以每个点为右端点的回文数,记为 \(cnt_p\)。每到一个点查询,对于一个左端点为 \(L\) 的回文,当前与他有交的回文数为 \([cnt_L,n]\) 的后缀和。然后把以它为中心的所有回文加入 \(cnt\)。以 \(i\) 为中心所有回文串的贡献,可以用线段树维护。
以 \(i\) 为中心 偶回文串的贡献:$$\sum\limits_{j=i-p0_i}^{i-1} (cnt_j \times (j-i+p0_i+1)) + \sum\limits_{j=i}^n cnt_j \times p0_i$$
以 \(i\) 为中心 奇回文串的贡献:$$\sum\limits_{j=i-p1_i+1}^{i-1} (cnt_j \times (j-i+p1_i)) + \sum\limits_{j=i}^n cnt_j \times p1_i$$
注意,最后需要加上 \((p0_i+p1_i)^2 - p0_i - p1_i\),因为会自交。