快捷键

切换暗色模式 CtrlD
搜索 CtrlK
关闭弹窗 Esc
返回顶部 Ctrl
快捷键面板 Ctrl/
C++信息学奥赛打字闯关
首页 闯关训练 段位系统 题库中心
技术博客 新闻资讯
排行榜 信奥社区 成就殿堂 在线留言 AI助手
📑 文章目录

数据结构全家桶:树状数组、平衡树、分块与莫队算法

❤️ 920 点赞
💬 0 评论
👁️ 31515 阅读
🔄 更新于 2026-09-11 05:12

继续数据结构系列,本期带来中级数据结构的全面讲解。

一、树状数组(Fenwick Tree)
小巧精悍,代码量极小。

  • 单点修改 + 前缀查询(最基本)

  • 区间修改 + 单点查询(差分)

  • 区间修改 + 区间查询(维护两个 BIT)

  • 二维树状数组


// 单点加,前缀和查询
void add(int x, int v) { for (; x <= n; x += x & -x) c[x] += v; }
int sum(int x) { int s = 0; for (; x; x -= x & -x) s += c[x]; return s; }


二、平衡树
  • Treap:BST + 堆性质,通过随机优先级保持平衡

  • Splay:伸展树,常用于 LCT 的辅助数据结构

  • FHQ Treap(非旋 Treap):基于分裂/合并,支持可持久化

  • 对于竞赛,推荐学习 FHQ Treap,功能强大且代码简洁


三、分块算法
根号算法的典型代表:
  • 区间修改 + 区间查询分块

  • 莫队算法(本质是离线分块)

- 普通莫队:O(n√n)
- 带修莫队:O(n^(5/3))
- 树上莫队
- 回滚莫队(不删除莫队)

四、并查集进阶
  • 路径压缩 + 按秩合并

  • 带权并查集(维护边权关系)

  • 可撤销并查集(按时间回溯)

  • 种类并查集(维护对立关系)


五、练习建议
  1. 树状数组:洛谷 P3374 入门

  2. FHQ Treap:洛谷 P3369 普通平衡树

  3. 莫队:洛谷 P1494 小Z的袜子

  4. 可撤销并查集:洛谷 P3402 可持久化并查集

💬 评论 (0)

暂无评论,快来抢沙发吧~ 🛋️

在线

给管理员留言

每条留言老师都会认真阅读并回复

📚 课程咨询 🔧 技术求助 💡 建议反馈 🤝 合作联系

留言发送成功!

您的留言已送达管理员后台

追踪码(请保存以便查询回复)
------