Tricks

  • 每次删一个点,多次询问,但是方便加点不方便删点可以考虑分治模拟删点(把当前的另一半区间全加上,然后递归到子区间)。

  • 差分约束 \(=\) 转化成 \(\le and \ge\)

  • 左边 \(n\) 个点右边 \(m\) 个点的完全二分图的生成树数量是 \(n^{m-1}m^{n-1}\)

  • (树)一个连通块内点数 \(-\) 边数 \(=1\),所以总连通块数就是点数 \(-\) 边数。e.g.

  • 线段树合并时删去的点可以重新利用(garbage),在此基础上有时候可以优先遍历重儿子:reference

  • 需要多次排序但又不太关注每个数具体大小时(关注相对大小),可以二分一个 \(mid\),把 \(\ge mid\) 的设置成 \(1\)\(\le mid\) 的设置成 \(0\),借助线段树在 \(\operatorname{O}(\log n)\) 时间内完成排序。就是这个题。求中位数也可以这样。

  • (2024 一轮省集 D8T2)对于一条路径只贡献一次的问题,可以把点权设置为 \(w\),边权为 \(-w\),进行树上差分。

  • 不要无脑树剖线段树,有些问题可以树上差分做到线性或者线性对数,避免两只 \(\log\)。总结一下:

    • 单点加路径查:dfs 做根到单点的前缀和即可,查询变为 sum[u]+sum[v]-sum[lca]-sum[fa[lca]]
    • 路径加单点查:对于路径直接差分,路径两端点加,\(lca\)\(fa[lca]\) 减,查询做子树和。
    • 更进一步的有同时有链和子树的,不展开写了,大概使用到分离变量,开两个数据结构维护。reference1 and reference2
  • 算组合数的时候,一定要注意 \(n-m\) 是不是会出现负数!这个问题遇到两次了。

  • \(\sum\limits_{i=1}^n x\bmod i\) 或者干脆就是 \(\sum\limits_{i=1}^n\frac{x}{i}\) 想想整除分块啊??!

posted @   LHLeisus  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示