比前几天的模拟赛都要简单qwq
T1
有一个小技巧,形如 dp[i][j] = dp[i-1][j] + dp[i][j-1] 的式子里,(1,1) 到 (n,m) 的贡献相当于从 (1,1) 走到 (n,m) 的方案数。这样对于两段区间的合并,可以看做左半部分的矩形走到右半部分,可以 (k^2) 的转移出来。
然后就简简单单的线段树即可解决。
T2
发现如果可以处理出每一个木板两端会掉到哪个木板停下来就好了。发现从 u[i] 掉下的球要停在 j 需要满足 (u[i] > u[j] + s[j]) ,我们从下往上枚举 i ,使得 u[i] 递增。使用线段树查询 l[i]-1,r[i]+1 下面最先被哪个接住,在线段树节点上维护 u[j]+s[j] 的单调栈即可。
T3
考虑以点 A 为参考系,可以发现 B 的运动轨迹是一条折线。我们二分答案 r,有 (dist(A_x,B_{x+r}) leq r) 的时候有解,也就是转换参考系后折线与原点的最小值 (leq r) 的时候有解。