常用小技巧

  1. 定义对于一个区间 \([l,r]\) 中不存在 \(l \leq l' \leq r' \leq r\) 满足 \(mex(l,r) = mex(l',r')\) ,则称这个区间为“好的区间” 。好的区间只有 \(O(n)\) 个。
    证明:不妨设 \(a_l > a_r\) ,显然有 \(a_l < mex(l,r)\) ,假设对于以 \(l\) 为左端点存在另一个好的区间 \([l,r']\) 满足 \(r' > r\)\(a_l > a_{r'}\) ,则 \(a_{r'} < a_l < mex(l,r)\) ,说明 \(a_{r'}\) 一定已经在 \([l,r]\) 中出现过了,一定不会产生有效贡献,因此 \([l,r']\) 不可能是一个“好的区间”
    而对于 \(a_l < a_r\) 的情况同理,只需固定右端点即可

  2. 把一个完全二叉树划分成若干个满二叉树最多只有 \(O(\log n)\)

  3. 判断一个二叉树为满二叉树:根一直往左走的深度和一直往右走的深度距离是否相同

  4. 分块把大块按照第一维度排序,小块按照第二维度排序,可以在线处理二维偏序问题

  5. 在遇到要求前 \(k\) 大但 \(k\) 很小的情况时,一种好些的做法时直接用 set 维护,例题:P8817 [CSP-S 2022] 假期计划

posted @ 2023-10-15 23:19  FOX_konata  阅读(5)  评论(0编辑  收藏  举报