【问题标题】:find lowest value for each element given some intervals and its values给定一些区间及其值,找到每个元素的最低值
【发布时间】:2015-07-11 18:06:11
【问题描述】:

我在想这个:

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

目标:
找到市场上每种产品 (1..n) 的最低价格。您可以将产品的价格假设为没有卖家存在的无穷大。

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

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

谁能在O(nlogn) 中建议一种更简单的方法(可能是排序)?

【问题讨论】:

  • 好像和Christmas Visit Nightmare!一样的解决方案,也就是here
  • @Sklivvz ,我认为这不是作业调度之类的问题。
  • 我被你的问题弄糊涂了...如果m 很小,那么它自动是O(nlogn)。如果m 很大,那么它必须出现在大O 中的某个地方……您至少需要阅读所有m 卖家一次,对吧?
  • m

标签: arrays algorithm sorting


【解决方案1】:

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

针对您的问题:

  • 对于每个区间,更新 Segment 树中的相应节点。 (注意这里需要用到延迟传播,上面链接也有介绍)
  • 完成所有更新后,您可以使用 Segment tree 来回答查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2017-09-12
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    相关资源
    最近更新 更多