把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end
摘要: 给一个 $1$ 到 $n$ 的排列 $a$,并且给出点权 $x_i$,并定义: $$ LCA\{b\}=lca(lca(\dots(b_1,b_2),\dots),b_m) $$ 其中 $lca(x,y)$ 表示 $x$ 和 $y$ 的最近公共祖先。 并且给出一颗树。 求: $$ ans=\sum_{i=1}^n\sum_{j=i+1}^nx_{LCA_{i\in[i,j]}\{a_i\}} $$ 像这种比较经典的双 sigma 题目,最最最最暴力的解法是 $\mathcal{O}(n^3)$(先不考虑这里求 $LCA$ 的 $\log$)。 于是就很简单地拿到了此题的 $40$ 分。 那么怎么优化到 $\mathcal{O}(n\log n)$ 呢? 我一般的思路是直接上线段树。 我们这颗线段树(显然维护的是 $dfs$ 序区间)维护两个值,一个是 $cnt$ 代表这段区间内有点作为 $lca$ 的总方案,$sum$ 就是加和实际的数量 $\times x_{lca}$,注意到这里只有在有可能作为 $lca$ 的点上相乘,`pushup` 的时候都是加和(这里的思路比较巧妙)。 阅读全文
posted @ 2025-02-11 11:18 high_skyy 阅读(13) 评论(0) 推荐(0)
浏览器标题切换
浏览器标题切换end