数据结构
「IOI2014」Wall-线段树
· ☕ 1 min read

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

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

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


「NOI2014」魔法森林-LCT
· ☕ 3 min read

给定一个 $n$ 个点 $m$ 条边的无向图,每条边有两个权值 $a_i,b_i$ 。请你找到一条从 $1 \rightarrow n$ 的道路,令道路上所有边的集合为 $S$ ,使 $ans = \max(a_i)+\max(b_j),i,j \in S$ 最小,求出这个最小值 $ans$ 。


「CQOI2011」动态逆序对-CDQ分治
· ☕ 2 min read

对于序列 $A$ ,它的逆序对数定义为满足 $i\lt j$ ,且 $A_i>A_j$ 的数对 $(i,j)$ 的个数。
给出一个 $1$ 到 $n$ 的排列,按照某种顺序依次删除 $m$ 个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。


「ZJOI2013」K大数查询-整体二分
· ☕ 2 min read

有 $N$ 个位置, $M$ 个操作。

操作有两种:

  • 如果是 1 a b c 的形式表示在第 $a$ 个位置到第 $b$ 个位置,每个位置加入一个数 $c$ ;
  • 如果是 2 a b c 形式,表示询问从第 $a$ 个位置到第 $b$ 个位置,第 $c$ 大的数是多少。

「LNOI2014」LCA-树链剖分-差分
· ☕ 2 min read

给出一个 $n$ 个节点的有根树。有 $q$ 次询问,每次询问给出 $l,r,z$ ,求 $\sum _ {l \leq i \leq r}dep[LCA(i,z)]$ 。


「SCOI2013」多项式的运算-Splay
· ☕ 3 min read

维护一个动态的关于 $x$的无穷多项式 ,这个多项式初始时对于所有 $i$ 有 $a_i = 0$

$$ f(x)=a_0x^0+a_1x^1+a_2x^2... $$

操作者可以进行四种操作:

  • mul L R V 表示将 $x^L$ 到 $x^R$ 这些项的系数乘上某个定值 $v$ ;

  • add L R V 表示将 $x^L$ 到 $x^R$ 这些项的系数加上某个定值 $v$ ;

  • mulx L R 表示将 $x^L$ 到 $x^R$ 这些项乘上x变量;

  • query V 求 $f(v)$ 的值。

操作集中在前三种,第四种操作不会出现超过 $10$ 次。


「SDOI2014」旅行-树链剖分+动态开点线段树
· ☕ 2 min 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$ 。


可持久化线段树学习笔记
· ☕ 3 min read

可持久化线段树,是一种可以进行可持久化操作的线段树,具有优越的时间复杂度。


「HNOI2010」弹飞绵羊-动态树
· ☕ 2 min read

游戏一开始,Lostmonkey 在地上沿着一条直线摆上 $n$ 个装置,每个装置设定初始弹力系数 $K_i$ ,当绵羊达到第 $i$ 个装置时,它会往后弹 $K_i$ 步,达到第 $i+K_i$ 个装置,若不存在第 $i+K_i$ 个装置,则绵羊被弹飞。

存在两种操作:

  • 查询在第 $i$ 个装置起步时,再经多少次会被弹飞。

  • 修改第 $i$ 个装置的弹力系数为 $K'$ 。

保证任何时候,任何装置弹力系数均为正整数。


「HAOI2007」理想的正方形-单调队列
· ☕ 2 min read

有一个 $a \times b$ 的整数组成的矩阵,现请你从中找出一个 $n\times n$ 的正方形区域,使得该区域所有数中的最大值和最小值的差最小,输出这个最小的差值。