线段树
「POI2011」Tree Rotations-线段树合并
· ✏️ 1677 words · ☕ 4 mins read

现在有一棵二叉树,所有非叶子节点都有两个孩子。在每个叶子节点上有一个权值(有 $n$ 个叶子节点,满足这些权值为 $1…n$ 的一个排列)。可以任意交换每个非叶子节点的左右孩子。
要求进行一系列交换,使得最终所有叶子节点的权值按照前序遍历序写出来,逆序对个数最少。


「HAOI2012」高速公路-期望+线段树
· ✏️ 730 words · ☕ 2 mins read

Y901 高速公路是一条由 $N-1$ 段路以及 $N$ 个收费站组成的东西向的链,我们按照由西向东的顺序将收费站依次编号为 $1 \sim N$ ,从收费站 $i$ 行驶到 $i+1$ (或从 $i+1$ 行驶到 $i$ )需要收取 $V_i$ 的费用。高速路刚建成时所有的路段都是免费的。

政府部门根据实际情况,会不定期地对连续路段的收费标准进行调整,根据政策涨价或降价。

求对于给定的 $l,r(l < r)$ ,在第 $l$ 个到第 $r$ 个收费站里等概率随机取出两个不同的收费站 $a$ 和 $b$ ,那么从 $a$ 行驶到 $b$ 将期望花费多少费用呢?


「IOI2014」Wall-线段树
· ✏️ 409 words · ☕ 1 mins read

给定一个长度为 $n$ 且初始值全为 $0$ 的序列。你需要支持以下两种操作:

  • $Add, L, R, h$ :将序列 $[L, R]$ 内所有值小于 $h$ 的元素都赋为 $h$,此时不改变高度大于 $h$ 的元素值
  • $Remove, L, R, h$:将序列 $[L, R]$ 内所有值大于 $h$ 的元素都赋为 $h$ ,此时不改变高度小于 $h$ 的元素值

你需要输出进行 $k$ 次上述操作之后的序列。


「SDOI2014」旅行-树链剖分+动态开点线段树
· ✏️ 827 words · ☕ 2 mins read

给定一棵 $n$ 个节点的树,对于每个点都有两个权值 $w_i,c_i$ 。

存在 $m$ 个操作,分为4类。

  • CC x c”:将 $c_x$ 更改为 $c$ ;

  • CW x w”:将 $w_x$ 更改为 $w$ ;

  • QS x y”:对所有满足在 $x$ 到 $y$ 路径上且 $c_i = c_x = c_y$ 的节点 $i$,求 $\sum w_i$ ;

  • QM x y”:对所有满足在 $x$ 到 $y$ 路径上且 $c_i = c_x = c_y$ 的节点 $i$ ,求 $\max(w_i)$ ;

对于后两个操作,保证 $c_x = c_y$ 。


「POI2014」KUR-Couriers-主席树
· ✏️ 451 words · ☕ 1 mins read

给一个数列 ${a_n}$ ,每次询问区间 $[l,r]$ 内有没有一个数出现次数超过一半。如果有,输出这个数,如果没有,输出 $0$ 。


「Luogu3765」总统选举-平衡树-线段树
· ✏️ 1285 words · ☕ 3 mins read

秋之国共有 $n$ 个人,分别编号为 $1,2,…,n$ ,一开始每个人都投了一票,范围 $[1,n]$ ,表示支持对应编号的人当总统。共有 $m$ 次预选,每次选取编号 $[l_i,r_i]$ 内的选民展开小规模预选,在该区间内获得超过区间大小一半的票的人获胜,如果没有人获胜,则由小 C 钦定一位候选者获得此次预选的胜利(获胜者可以不在该区间内),每次预选的结果需要公布出来,并且每次会有 $k_i$ 个人决定将票改投向该次预选的获胜者。全部预选结束后,公布最后成为总统的候选人,没有候选人的话输出 $-1$ 。


「NOI2015」软件包管理器-树链剖分
· ✏️ 1215 words · ☕ 3 mins read

你决定设计你自己的软件包管理器。如果软件包 A 依赖软件包 B ,那么安装软件包 A 以前,必须先安装软件包 B 。同时,如果想要卸载软件包 B ,则必须卸载软件包 A 。现在你已经获得了所有的软件包之间的依赖关系。除 $0$ 号软件包以外,所有软件包都会依赖一个且仅一个软件包,而 $0$ 号软件包不依赖任何一个软件包。依赖关系不存在环。

现在有一些安装或卸载软件包的操作,需要求出这个操作实际上会改变多少个软件包的安装状态(即安装操作会安装多少个未安装的软件包,或卸载操作会卸载多少个已安装的软件包)。


「SDOI2011」染色-树链剖分+线段树
· ✏️ 1240 words · ☕ 3 mins read

给定一棵有 $n$ 个节点的无根树和 $m$ 个操作,操作有两类:

  • 将节点 $a$ 到节点 $b$ 路径上所有点都染成颜色 $c$ ;
  • 询问节点 $a$ 到节点 $b$ 路径上的颜色段数量(连续相同颜色被认为是同一段),

如“112221”由3段组成:“11”、“222”和“1”。

请你写一个程序依次完成这 $m$ 个操作。