我目前正在处理一个问题,我想维护一组线性函数的convex hull。它可能看起来像这样:
我使用set<Line>
来维护线条,以便我可以动态插入线条,这样可以正常工作。这些线是通过增加斜率来排序的,斜率由线的operator<
定义。通过抛弃&#34;取代&#34;在数据结构中,数据结构保证每条线都有一些是凸包的一部分。
现在问题是我想在这个数据结构中搜索X坐标在给定 x 之前的交叉点。由于这些交叉点只是通过集合中的邻接来明确定义(在上图中,那些是点N
,Q
等),它似乎完全是仅凭set
无法解决,因为我没有
因此我倾向于使用第二个set<pair<set<Line>::iterator, set<Line>::iterator> > >
,但这看起来非常难看。看到我们主要需要这个用于编程竞赛,我想最小化代码大小,所以我想避免第二组或自定义BBST数据结构。
是否有一种很好的方法来模拟这种情况仍然让我通过相邻元素上的函数值动态和二进制搜索来维护线条,并且具有合理数量的代码?