HNOI2016序列
题意
给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\)。有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求
\[\sum_{l\le l'\le r'\le r}\min_{i=l'}^{r'}a_i
\]
数据范围:\(1\le n,m\le 10^5\),\(|a_i|\le 10^9\)。
题解
矩形带权带权二维数点。
考虑最好想的做法,我们发现一个点的贡献对于 \([l,r]\) 来说类似于一个矩形,询问就是矩形价值和,边界在左右侧第一个比他大的位置上。我们直接动态开点四叉树就完了。
考虑降低一下复杂度,我们先把矩形差分变为求前缀和,然后对 \(r\) 扫描,维护每一个 \(l\) 的 答案。但是我们肯定不能把一个矩形拆成很多条线,这样复杂度就错了,我们发现这个矩形在前缀下的贡献是一个 \(k\) 值不变的一次函数,考虑在第一次出现的时候加入一个斜线 \(kx+b\) 代表贡献,在离开的时候也加入一个 \(kx+b\) 的函数,这样复杂度就降下来了。