【杂项】trick

  1. 数区间颜色个数只数最左边的一个。

  2. 维护时间戳来避免多次 memset

  3. 树状数组上倍增-\(O(\log n)\)

P6619 [省选联考 2020 A/B 卷] 冰火战士

开始二分,设初始位置为 \(r\)\(sum=\sum\limits_{i=1}^r tr_i\),要求的数记为 \(ans\)

考虑依次跳 \(2^{\log n},2^{\log n-1},...,2^0\) 个单位,方式如下:如果跳的这位更新后 \(>ans\),则不更新,否则更新。也就是说,时刻保证 \(\sum\limits_{i=1}^r tr+i\le y\)

发现往后跳的段都是诸如 \([r+1,r+2^k]\) 的段,显然树状数组可以 \(O(1)\) 统计。

  1. 关于平均值的问题中,若给定平均值,可以考虑将将每个位置的值减去平均值,将平均值转化为了区间和大于等于0。

  2. 关于中位数等问题中,常见二分答案,将大于 mid 的数记为 1,小于 mid 的数记为 -1,如果区间和为0则这个数就是序列中位数。P1627

  3. 多个约束条件,常见拆条件,例如枚举或者算贡献。

  4. \(x\) 个区间,要求公共点 \(\to\) 区间中有位置被覆盖次数 \(>=x\)P1712 [NOI2016] 区间

  5. 序列中随机选取 [l,r] 的期望等价于求出和除以序列数。CF846F P5068 [Ynoi2015] 我回来了

  6. 严格递增和不严格递增:令 \(b_i=a_i-i\),就将严格递增转化为了不严格递增。

  7. 考虑一个柿子如果形如 \(f_i=\max\limits_{i\le j\le n}(f_j+\min(sum1_{i,j},sum2_{i,j}))\),那么可以先强制钦定取第一项,做两次算即可。

  8. 考虑一个 dp 柿子从前面连续的项转移,但是不能用单调队列,考虑线段树或 cdq 分治维护。

  9. 势能分析

  10. 考虑一些关于最大值的东西可以搬到笛卡尔树上分治。

  11. 考虑一个暴力可能可以优化的途径:记忆化、阈值分治

posted @ 2024-02-29 13:46  lgh_2009  阅读(5)  评论(0编辑  收藏  举报