5
https://www.luogu.com.cn/problem/P10439
显然第 \(i\) 天只有 \(m_{i-1}+m_i\) 个关键时间点。对每一天拆 \(m_{i-1}+m_i\) 个虚点,每个虚点向它下一步跳到的点连边,这会形成一个带权的树形结构,而询问相当于是查询所有 \(dep=l\) 的点到 \(dep=r\) 的点的最短距离。
考虑根号分治,如果 \(dep=l\) 的点数小于 \(lim\),就直接枚举然后 \(O(1)\) 求 \(k\) 级祖先算答案;否则把询问离线下来然后 dfs 整棵树。
复杂度 \(O(n\sqrt n)\)。
https://huang.lt/contest/1357/problem/7416
与此题大战十分钟,拼尽全力无法战胜。请教高人后终于会了。
答案显然不是 \(2^{n-1}\),因为会算重,考虑什么时候会算重,这当且仅当一个串删掉第一个字符和删掉最后一个字符形成的串相等,也等价于一个串的所有字符全都相同。于是枚举串从不全相同变成全相同的一步,时间复杂度 \(O(n)\)。
https://www.luogu.com.cn/problem/P9338
宇宙题,注意到 A B 内部的顺序都不会改变,所以考虑 dp,设 \(dp_{i,j}\) 表示前 \(i\) 对 A B 进行匹配,共匹配了 \(j\) 组的最少交换次数。由于答案关于这个 dp 的第二维是凸的,所以可以 wqs 干掉,现在只有一维了。
这个 dp 看起来很好优化,但我想了很久。让我们把 dp 的式子写出来:
其中
注意到 \(p\) 是单调的,所以把决策点分成两部分,一部分是 \(j<p_i\) 的,另一部分是 \(j\ge p_i\) 的。对于 \(j<p_i\),可以在扫描到 \(i\) 的时候将 \([p_{i-1},p_i)\) 这一区间内的决策点激活,用凸包维护 \(dp+c\) 的最小值。对于 \(j\ge p_i\),这部分的 \(c\) 均为 \(0\),所以可以单调队列维护。
时间复杂度 \(O(n\log n)\)!
https://www.luogu.com.cn/problem/P9531
注意到每条边存在于 mst 内的时间是一段区间,考虑怎么求出这些区间。
总大到小加边,在加边的同时维护 mst,加入一条边 \((x,y)\) 时求出 \(x\) 到 \(y\) 的路径上边权最大的边并替换之。如果用第 \(i\) 条边替换了第 \(j\) 条边,那么 \(r_i=\frac{w_i+w_j}{2},l_j=\frac{w_i+w_j}{2}+1\)。暴力维护就是 \(O(nm)\) 的!
http://oj.daimayuan.top/contest/377/problem/3287
注意到 \([a\bmod m<b\bmod m]=\lfloor\frac{a}{2}\rfloor-\lfloor\frac{b}{2}\rfloor-\lfloor\frac{a-b}{2}\rfloor\),然后就做完了。

浙公网安备 33010602011771号