总结-数据结构

数据结构

1. 树状数组

  • 写起来很方便, 用的比较多, 比线段树更实用吧. 虽然原理到现在不太清楚...
  • 往往没有裸树状数组的题目, 往往和其他算法相结合.
  • 单次修改或查询: O(logn)
  • 树状数组的弱点是不支持区间最大最小值什么的, 但是利用它可以统计前缀和的性质可以进行离线处理或统计某一时刻的数据. 还有可以通过转化的方式使它支持相减. 比如不根据位置而根据权值统计、维护权值出现次数等等.

2. 线段树

  • 线段树操作比较齐全, 区间或单点修改、求和、求最大最小值, 支持一些标记比如增加、乘法等. 但是除非数据特殊不支持区间翻转.
  • 因为统计功能比较强大, 所以有很多变种. 比如和树链剖分结合, 以及zkw线段树、函数式线段树(主席树).
  • 有时需要动态开点
  • 单次修改或查询: O(logn)

3. splay

  • splay支持的操作是这几项里最全的, 除了上面的还有区间插入、移动等.
  • 可以自底向上, 可以自顶向下, 效率前者高一些, 但有的题目不能做.
  • 上面各种数据结构的题其实都可以用splay做, 不过splay常数略大吧.
  • splay的巅峰之作就是维护数列了吧. 标记下传真的太头疼了.
  • 单次修改或查询: O(logn). 常数比较大.

4. 并查集

  • 性价比很高的算法. 支持集合合并和查找, 以及求秩
  • 单次合并或查找: O(1)

5. 哈希表

  • 主要用于判重, 做的题少(平常都用STL的set或者map了)
  • 单次查找: O(1)
  • 1. BZOJ-2761-不重复数字 裸hash, 模的数并不是越大越好(还要清零)

总结一下就是序列操作类的题目还可以做, 但遇到其他的比如字符串就只能STL暴力了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值