给定一个大小为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。没有英文版的说明,并且测试用例以不同的方式呈现输入数据,所以请不要关注源代码。