模拟44 题解

A. D

显然对于每一个点,它左侧的区间gcd是单调不增的。

因为gcd一旦减少至少减半,不同取值不超过log个。

从左到右扫一遍的过程中,维护一个单调的pair数组。

第一维为区间gcd值,第二维为左端点下标。

显然我们只关心同一个gcd值最小的左端点。

不断维护一下这个元素个数不超过log的单调数组,

暴力修改更新答案就可以。

复杂度貌似是$O(nlog^2n)$的,

然而如果均摊的话,每个数调用gcd是log级别的,总复杂度应为$O(nlogn)$。

B. E

最近做了很多这类关于区间的题,大致思路都是排序后贪心。

还是首先将2n个数排序。

考虑2n个数中的最小值和最大值。

如果最值不在同一组中,

那么有两种情况:

1.最值被分到R。

那么另一个组应该取得极差最小的n个属于不同组元素。

显然的单调指针问题,思路类似数颜色的莫队做法。

2.最小值被分到R,最大值被分到B。

则一个最小值和一个最大值固定了。

显然使R取得每组的最小值,B取得每组的最大值。

任何交换都使答案更差。

C. F

首先是最弱智的dp,考虑两个指针的位置。

稍微思考一下发现只要一个指针的位置就可以了,因为另一个指针的位置一定指向前一个操作应值的位置。

然后dp就省掉了一维,稍微观察一下转移,

一个是区间加法,一个是对各点dp值加减下标后取个最值,线段树优化就完了。

原文地址:https://www.cnblogs.com/skyh/p/11532860.html