STL 用于 C++ 中的段树

Posted

技术标签:

【中文标题】STL 用于 C++ 中的段树【英文标题】:STL for segment tree in C++ 【发布时间】:2015-02-16 05:54:42 【问题描述】:

段树有STL吗?

在竞争性编程中,为 seg 树编写代码需要花费大量时间。我想知道是否有任何 STL 可以节省大量时间。

【问题讨论】:

相关:***.com/q/205945/252576 【参考方案1】:

我假设“段树”实际上是指范围树,它在编程竞赛中比用于存储一组间隔的更专业的结构更常用。

C++ 标准库中没有这样的容器,但如果您要参加 ACM 比赛,您可以考虑编写自己的容器,然后根据需要简单地复制它。你可以找到我自己的实现here(包括惰性传播),但如果你搜索网络,你可能会找到更通用的版本。

在需要求和而不是最小值或最大值的应用程序中,您可以使用二叉索引树而不是段树,这样更快,使用更少的内存,并且也更容易编码(大约十几行或少)。

【讨论】:

虽然这完全不相关,如果它违反了 SO 规则,我很抱歉,但我突然敬畏地看到你的答案就在我的上方。我也在 Quora 上关注你(我是反对让重罪犯投票的人,并且对你的回答发表了同样的评论),所以这绝对是一个惊喜。 PS:如果这样的评论违反规则,请告诉我,我会删除它。【参考方案2】:

C++ 中没有用于段树的 STL。但是,您可以查看名为 Interval Container Library (ICL) 的 Boost 库,它应该可以满足您的要求。

【讨论】:

以上是关于STL 用于 C++ 中的段树的主要内容,如果未能解决你的问题,请参考以下文章

golang golang中一个笨拙的段树实现

红黑二叉搜索树中的几何搜索

[C++ STL] map使用详解

在段树中查询

如何有效地将节点添加到段树中以进行最小范围查询?

C ++中的排名树