- P11833
- 因为我们有 \(a_i < a_{i+1}\) 且 \(b_i < b_{i+1}\)
- 这里我是想怎么样才能统计两两之间的影响,发现十分复杂并且是 \(O(N^2)\) 的也无法优化
- 然后我就发现时间限制的深意是否可以说是按照时间顺序从小到大地推一定是最优或者说不劣的
- 然后我就发现这个结论它是对的
- 但是我发现这个点它走的时候会影响一段连续的点使得它们也要移动,但是我发现 它们之间的相对顺序没发生改变,并且是 \(x\) 到 \(i-1\) 的一些点 或者 \(i+1\) 到 \(y\) 的一些点
- 这个时候我就开始分类讨论了,假设 \(i\) 当前的位置为 \(d_i\)
- 当 \(d_i < b_i\) 时
- 则考虑第一个 \(j > i\) 且 \(b_i + (j - i) <= d_j\) 即 \(b_i - i <= d_j - j\)
- 而这段需要耗费的时间为 (最终的位置的和)- (之前的位置的和)
- 当 \(d_i > b_i\) 时
- 则考虑第一个 \(j < i\) 且 \(b_i - (i - j) >= d_j\) 即 \(b_i - i >= d_j - j\)
- 而这段需要耗费的时间为 (之前的位置的和) - (最终位置的和)
- 当 \(d_i < b_i\) 时
- 发现 \(d_j - j\) 一定是单调不降的,故可以二分
- 这个时候就会发现之和 \(d_j - j\) 有关,然后我们发现每次变化的 \(d_j - j\) 的值都是一样的,故可以看成 区间赋值
- 故我们维护 \(d_j - j\) 的值构成线段树即可
- 后续的做法是找到第一个不符合要求的数,然后没有把范围设成0-n-1卡了半个多小时/fn
- vp 第16场
- T1 很明显我们可以从后往前贪心的选,如果碰到一个能选的 \(j\) 则先选了 \(j\),之后从最后一个没选的 \(i\) 开始往前选把 \(j\) 后面的所有数选完即可
- T2 很套路的同余最短路
- 一开始我就用 \(f_i\) 表示 \(mod\) \(c_1\) 为 \(i\) 的最小花费,答案即为 \(\max (f_i) - c_1\)
- 然后我们加入一个数用 spfa 跑一次即可,只需要松弛新加入的边
- 但是我们也可以松弛的时候使用类似归并排序的方法进行松弛
- T3
- 首先我想出来的是 \(O(nq)\) 左右的暴力
- 我们考虑取第一个字符一定是假设是长度为 \(len\) 的字符串,必将是 \([1,len-k+1]\) 中选一个最小的,然后再按照这样去选
- 想到这里我的思路就断了,没有继续去想,实际上是去针灸了,再想一会的话可能会想出来?
- 然后我们可以考虑只有AB的情况
- 发现所有的A都要选上去(如果<=k)的话
- 那么将是一些 A 加一段后缀组成的形式
- 由这种情况我们就可以推导到 26 种字母的情况
- 还是一样的, A 一定要选上去,故还是一些A加上一段后缀
- A …… A …… A 把这里整出来 A (一段后缀
- 然后我们发现按照我们那样的贪心的都选B,然后一直选到 Z 即可
- 用字符串哈希维护,以及记录前缀字符的个数即可
- 首先我想出来的是 \(O(nq)\) 左右的暴力