Loading

2026.2.16

2026.2.16

CF1326E Bombs

\(\color{blue}{线段树}\)
首先,存在答案单调性,考虑增量法。如果 \(ans<x\),那么每个 \(\ge x\) 的数 \(y\) 都会删除。如果把符合条件的数 \(y\) 所在的位置单点加一,每个炸弹单点减一,那么 \(ans<x\) 的充要条件就是所有后缀和 \(\le 0\)。使用线段树维护即可,

20035 冒泡排序

\(\color{blue}{性质}\)
考虑冒泡排序每次可以把一个数向左移动一格,或者向右移动多个。所以计算每个数左边比他大的数的数量,并取最大值就是答案。

Luogu P4786 [BalkanOI 2018] Election

\(\color{blue}{线段树}\)
把问题转化为 01 序列使得所有前缀后缀和 \(\ge 0\)。先考虑只需要满足前缀和 \(\ge 0\) 的情况。计算前缀和和后缀和 \(pre\)\(suf\)。那么最小操作数量显然是 \(-\min_{i=0}^n pre_i\)。具体就是找到第一个前缀和变为 \(-1,-2,\dots\) 的位置,把他们删掉。再考虑也需要保证后缀和的情况。显然在保证前缀和的时候需要尽量删除靠后的位置,这样对后缀和影响大。假设后缀和保证完的后缀和是 \(suf'\)。考虑计算 \(suf'_i\)。设 \(suf'_i = suf_i + c\),其中 \(c\) 为正着构造时,在 \([i, n]\) 内删除的数字个数。那么可以得到 \(c=-\min_{j=0}^n pre_j + \min_{j=0}^{i-1} pre_j\)。所以答案为 \(-\min_{i=1}^{n+1} \min_{j=0}^{i-1} (suf_i + pre_j)\) 问题转化为需要找到一段前缀与一段后缀,使得它们不交,最小化总和。使用线段树即可。

posted @ 2026-02-18 14:06  legendcn  阅读(0)  评论(0)    收藏  举报