JOISC 2017
烟花棒
二分答案后可以转化为该问题:两个队列 \(A,B\) 和一个变量 \(t\),每次从一个队列头弹出一个值加到 \(t\) 上。问是否能在 \(t\) 处处 \(\ge 0\) 的情况下将两个队列弹完。
首先如果存在一个最小前缀的和 \(\ge 0\),能取就取一定是优的。这样每次贪心取前缀,剩下 \(A,B\) 的前缀和均 \(<0\)。发现因为我们知道 \(t\) 的最终值所以可以倒着考虑,将值翻转后即转化为上面的问题,再做一次即可。
门票安排
https://www.luogu.com.cn/article/f3y4sjaz
长途巴士
若钦定一个人被踢出,则排在后面且和他一样接水的人都会被踢出。因此每次都会踢出一个区间的人。这样就可以 dp 了。
JOISC 2018
野猪
对于两个点,只需要维护四个信息:最短路径 \(S\),起点不为 \(S\) 起点的最短路径,终点不为 \(S\) 终点的最短路径,起点终点均不为的最短路。
然后可以写出 dp 式子,应该能套动态 dp
JOISC 2019
两道料理
画到方格上,相当于找一条从 \((0,0)\) 到 \((n,m)\) 的路径,两种限制相当于从下侧和左侧开始与起始边垂直的线段,表示经过这条边可以获得若干代价。发现对于水平的边,可以假设已经穿过,然后将其转化为竖直的边(表示穿过就会撤回这个代价),然后即可线段树优化 dp。
JOISC 2020
収穫
考虑每个树从当前被摘的人连向下一个被摘的,形成内向基环树森林。对于不在环上的点,可知哪些点会在何时到达,容易数点。对于环上的点,按环扫描线,只会有少量的点会被修改。接下来相当于统计 \(x\cdot k+s_i\le lim\) 的数量,数点即可。
掃除
考虑特殊性质,如果所有点有序(\(x_i\le x_j,y_i\ge y_j\))则操作后同样有序,平衡树维护操作即可。发现当点无序时只要操作一次即可变得有序,因此只需再知道每个点何时被加入。倒序扫描一下即可。
接下来考虑加入新数,此时是无序的,使用线段树分治即可解决问题。
JOISC 2021
ボディーガード
横坐标位置,纵坐标时间,所有人都是一条向左上或右上运动的线段。旋转 \(45\) 度后变成矩阵,从指定起点向上或右走,贡献为路径和线段重合的长度乘系数。首先只把关键点(线段的起点终点)的 \(x,y\) 坐标找出来,dp 出从格点出发的答案。
考虑询问,一定是一直向右走知道某条竖线拐上去,或者向上类似走。这些贡献都可以变成一次函数的形式,就可以数据结构维护了。
JOISC 2024
有趣的家庭菜园 5
首先对于两个确定的序列一定是排序后差的最大值最小。先把序列复制一遍方便处理。
先只考虑求连续的 \(B\) 数组的答案。先二分答案,此时可知每个点的排名一定在某个区间内。扫描线,用平衡树维护排名的限制。
不过这样用不上 \(A\) 单调的性质,利用上后应该可以变成 \(O(n\log V)\)。