模拟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值加减下标后取个最值,线段树优化就完了。