在给定一些间隔及其值的情况下,找到每个元素的最低值

时间:2015-07-09 14:00:17

标签: arrays algorithm sorting

我在想这个:

市场有n个产品和m个卖家。对于每个卖家k,我们有三联(i,j,p):这意味着卖家以i, i+1, .., j的价格销售编号为p的产品。

目标:
查找市场上每种产品(1..n)的最低价格。您可以假定产品的价格为无穷大,而且不存在卖方。

示例:
n=4, m=3和3个三元组是(1,3,4), (2,3,2), (3,4,1)。因此,产品(1..4)的最低值为:(4, 2, 1, 1)

O(nm)解决方案很简单。我们可以在O(n+ mlogn)中使用二进制索引树进行范围更新和点查询。

有人可以在O(nlogn)

中建议一种更简单的方法(可能是排序方式)

1 个答案:

答案 0 :(得分:0)

你可以在O(M *(logN + logM))中进行预处理,然后使用Segment树回答O(logN)中的每个查询,这里描述 Algorithm Gym :: Data structures - Codeforces.

对于你的问题:

  • 对于每个间隔,更新“细分”树中的相应节点。 (注意,这里你需要使用Lazy传播,这也在上面的链接中描述)
  • 完成所有更新后,您可以使用细分树来回答查询。