(Global Round 2)题解
(zhanglichen 2021.1.1)
(A.Ilya and a Colorful Walk)
给出一个数组,询问(2)个不相同的数字的最远距离。
(Solution)
做法有很多,刚开始来不及细想直接打了发线段树过的,(A)题上线段树,很有精神。
时间复杂度(O(nlogn))。
(B.Alyona and a Narrow Fridge)
给出一个高为(h),宽为(2)个冰箱,可以在冰箱里面放置宽为(2)的隔板。
给出(n)个酒瓶的高度,酒瓶可以放置在冰箱里,每个酒瓶的宽为(1)。但是一个酒瓶不能放在另一个酒瓶的上面,如果它们之间没有隔板。
现在询问一个最大的(k),使得编号(1)到(k)的酒瓶都能放在冰箱里。
(Solution)
简单推导后可以发现,对于一个(k),可以把编号(1)到(k)的酒瓶从大到小排序,(2)个(2)个放,一定可以最优利用空间。考虑到答案具有单调性,可以二分(k)。
时间复杂度(O(n^2logn))。
(C.Ramesses and Corner Inversion)
给出(2)个(n*m)的矩阵(a)和(b),单次修改可以选择(a)的一个小矩阵,把它的四个角取反。
但是不允许单点修改。
询问能否将(a)变成(b)。
(Solution)
从上到下、从左到右依次修改即可。
时间复杂度(O(n^2))。
(D.Frets On Fire)
给出一个数组(a),每次询问(l)和(r),每个(a_i)的范围是(a_i+l)到(a_i+r)。询问整个数组覆盖的总范围长度。
(Solution)
首先对数组(a)排序并去重,可以确定范围的起点是(a_1+l),范围的终点是(a_n+r)。
现在考虑整个范围哪些地方是空出来的。
当且仅当(a_i+r<a_{i+1}+l)的时候,(a_i)表示的范围和(a_i+1)表示的范围是不相交的。中间空出来的这段长度(x=a_{i+1}-a_i-(r-l))。
因此我们可以先计算出差分数组,然后对它进行排序。对每一个询问,先二分出差分数组上最小的大于(r-l)的位置(p),答案就是(sum-c[p~n]+(r-l)*(n-p))。
(sum)表示起点到终点的距离,(c[p~n])表示差分数组位置(p)到位置(n)的元素和,这一步可以用前缀和(O(1))得到。
时间复杂度(O(nlogn))。
(E.Pavel and Triangles)
给出一个数组(a),(a_i)表示长度为(2_i)的火柴数量。询问这些火柴最多能拼成几个三角形。
(Solution)
首先根据幂次的性质,三角形只可能是等边或等腰的。
一组样例:(5,10),可以得出优先组等腰三角形比等边更优的结论。
所以就贪心的先组等腰,再组等边即可。
时间复杂度(O(n))。