Global Round 2 题解

(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))

原文地址:https://www.cnblogs.com/zhanglichen/p/14221279.html