翻译界最 速 传 说
T1 只不过是长的领带
显然第
长的
与
匹配是最优的,考虑将
排序,当
时,
与
匹配,当
时,
与
匹配,因此我们用一个前缀最值一个后缀最值就可以拼出每个
的答案。
时间复杂度
。
代码链接
T2 JJOOII 2
我们要找一个最短的子串使得串里包含
这一子序列,显然从任何一个位置可以贪心选取,因此我们考虑用一个队列,当队列里的元素超过
个就 pop,可以预处理出每个位置以其结尾至少要多长才能包含
,就能求算出每个位置以其结尾至少要多长才能包含整个。时间复杂度
。
代码链接
T3 集邮比赛 3
我们注意已经经过的区域是包含
位置的一个区间,故记
为“当前已经经过的站是
,其中成功集邮
张,现在站在
位置的可行最小时间”。这一状态可以
转移,答案即为不为
的最大的
,时间复杂度
。
代码链接
T4 奥运公交
注意到数据范围下有
,我们跑最短路只需要使用
的贪心 dijkstra 即可。记四个最短路树
分别是从
出发,沿着
的最短路树和
的最短路树,对于一条边
,我们先认为不把边考虑为反向,而是添加一条反向边,这样新的答案必然是让
的原最短路和
的取较小值,
也类似。注意到如果
这条边不出现在这四个最短路树上,则新的方案必然不经过
,我们直接用于更新答案即可。而在某个最短路树上的边只有
条,我们每个重新暴力建图跑一遍最短路即可。
时间复杂度
。
代码链接
T5 火灾
不错,我就是原题哥!
注意
时间的
位置的值就是
这一段的 max,我们要解决的就是等长区间的一段区间 max 之和。
考虑每个
,将
取为最大值的所有区间
有
,通过笛卡尔树或者排序容易求得。在二维平面上即询问是一条斜率为
的线段,有
个矩形。考虑将所有坐标进行变换
,我们的询问就是一条平行于
轴的直线,而矩形变成平行四边形。用 4 个树状数组,两个维护直线,两个维护斜线,即可在扫描线的过程中维护答案。
时间复杂度
。
代码链接