【发布时间】:2023-03-08 13:50:01
【问题描述】:
我遇到了以下问题
给定N x S个网格和m个平行于横轴的线段(它们都是元组(x', x'', y)),回答 Q 形式的在线查询 (x', x'')。这种查询的答案是最小的y(如果有的话),这样我们就可以放置一个段(x',x'',y)。所有段都不重叠,但一个段的开始可以是另一个段的结束,即允许段 (x', x'', y) 和 (x'', x''', y)。能够放置分段意味着可能存在不违反规定规则的分段(x',x'',y),实际上并未放置分段(未修改具有初始分段的板)但我们仅声明可能有一个。
约束
1 ≤ Q, S, m ≤ 10^5
1 ≤ N ≤ 10^9
Time: 1s
Memory: 256 Mb
这是来自以下链接的示例。输入段为 (2, 5, 1), (1, 2, 2), (4, 5, 2), (2, 3, 3), (3, 4, 3)。
回答问题
1) (1, 2) → 1
2) (2, 3) → 2
3) (3, 4) → 2
4) (4, 5) → 3
5) (1, 3) → 不能放置段
第三个查询的可视化答案(蓝色部分):
我不太明白如何解决这个问题。应该是用持久段树来解决的,但是我还是想不出来。
请你帮帮我。
这不是我的作业。源问题可以在这里找到http://informatics.mccme.ru/mod/statements/view3.php?chapterid=111614。没有可用的英文版本的语句,并且测试用例以不同的方式呈现输入数据,所以不要介意源代码。
【问题讨论】:
-
我不明白为什么查询 (2, 3) 的答案是 2?段(2、3、2)可以放在哪里?
-
@yacc 由于一个段的开头可以是另一个段的结尾,所以段 (2, 3, 2) 没有问题,它会“扩展”段 (1, 2, 2) ,使它们看起来像一个单独的段(1、3、2)(认为段只是假设的,因为初始板没有改变)
-
也许你加个小图来说明一个例子?
-
问题陈述说查询是在线的 - 查看公式 a = x_i + p , b = y_i + p ,以及 p 如何更新。如果我们事先得到所有查询,问题就容易多了。
标签: algorithm data-structures segment-tree persistent-data