跳转至

区间最值操作 & 区间历史最值

本文讲解吉老师在 2016 年国家集训队论文 中提到的线段树处理历史区间最值的问题。

区间最值

笼统地说,区间最值操作指,将区间 [l,r] 的数全部对 xmaxmin,即 ai=max(ai,x) 或者 ai=min(ai,x)

HDU5306 Gorgeous Sequence

维护一个序列 a,执行以下操作:

  1. 0 l r t lir, ai=min(ai,t)
  2. 1 l r 输出 maxi=lrai
  3. 2 l r 输出 i=lrai

多组测试数据,保证 T100, n,m106

区间取 min,意味着只对那些大于 t 的数有更改。因此这个操作的对象不再是整个区间,而是「这个区间中大于 t 的数」。于是我们可以有这样的思路:每个结点维护该区间的最大值 Max、次大值 Se、区间和 Sum 以及最大值的个数 Cnt。接下来我们考虑区间对 tmin 的操作。

  1. 如果 Maxt,显然这个 t 是没有意义的,直接返回;
  2. 如果 $Se