P7913 Solution
先考虑有 \(n\) 个廊桥的分配。假设廊桥编号为 \(1\sim n\),我们用两个堆 \(h1,h2\) 分别存当前空闲的廊桥编号和正在使用廊桥的飞机的离开时间。对于国内和国外的飞机分别做一次以下操作:
先按到达时间排序,从左到右扫,到第 \(i\) 架飞机的到达、离开时间为 \(l_i,r_i\) 时:
-
pop 掉 \(h2\) 内所有离开时间 \(<l_i\) 的飞机,同时把它们占的廊桥编号 push 进 \(h1\)。
-
如果 \(h2\) 的大小 \(<n\),将 \(r_i\) push 进 \(h2\),同时将 \(h1\) 中编号最小的廊桥分配给第 \(i\) 架飞机。
容易发现,在仅有 \(k\) 架廊桥的情况下所有一开始分配的廊桥编号 \(>k\) 的飞机都无法进入廊桥。这是因为我们在分配时每次都选择了最小的廊桥编号。
于是接下来就简单了。分别统计一架廊桥被多少架飞机进入过,做一遍前缀和后 \(\mathcal O(n)\) 扫一遍即可。
标签:h2,p7913,solution,编号,廊桥,分配 From: https://www.cnblogs.com/iorit/p/18052651