第一次 AK edu。
A 00:02 +0
B 00:06 +0
C 00:16 +0
D 00:36 +1
E 01:06 +1
F 01:47 +0
本场比赛都不太好一句话题面,所以就都不写简要题面了。
A.Greedy Monocarp
做法:
显然最优策略不会管选不到的数,如果把某个本来不选的数加到会选是不优的。
排序之后贪心选数,选到不能再选数的时候那操作补差额即可。
B.Game with Colored Marbles
做法:
容易发现出现次数大于 1 的数都选不全但是都能选一个。
正好出现一次的数显然选中就选全了,而且选中的个数一定是 \(\lceil \frac{cnt}{2} \rceil\) 个,其中 \(cnt\) 为出现正好一次的种类数。
C.Competitive Fishing
做法:
尝试刻画分段的过程。
发现从策略上考虑很难做,再尝试从权值的折线图来考虑。
可以发现每次操作都是把一段后缀的权值都 +1 ,所以从每个位置操作的价值都是可以直接计算的。
拿后缀和计算价值,排个序贪心选即可。
D.Recommendations
做法:
实际上求的是每个区间完全包含这个区间的所有区间(除了自己)的交集大小。
这是经典二维数点问题,排个序拿树状数组维护即可,需要注意完全相同的区间所导致的问题。
E.Vertex Pairs
做法:
容易发现选择的最大编号的点编号越小越好。
所以找到选择的最大点是好找的,只需要二分+并查集和启发式合并set即可,找出一个点的时间复杂度 \(O(n \log^3 n)\) 。
显然复杂度不可接受。
同时可以发现找到选的编号最大的点是容易的,只需要扫一遍就行了,时间复杂度 \(O(n \log^2 n)\)。
所以我们可以找出一个一定选的点。
此时可以假设删掉编号比必选点最大的点之后依旧与必选点联通的点都选。再考虑删除一些点。
此时每种颜色都会对应一条到祖先的链必须选的限制。
只需要 set 维护可删点的即可,每次删除可删的编号最大点以及这个点的子树,在删除的过程中需要同时维护每个颜色的必选点限制。
时间复杂度 \(O(n \log^2 n)\) ,实现精细可以做到 \(O(n \log n)\) 。
F.Two Subarrays
做法:
大力线段树。
把 \(a\) 的区间和看作前缀和相减,这时选两段就可以转化成选两对不相交的 \(l,r\) 。
与最大字段和相似的线段树即可维护,每次修改 \(b\) 就是单点修改,修改 \(a\) 就是对后缀的 \(s\) 做加法,讨论一下系数打标记即可。
因为每个点作为 \(l\) 的权值为 \(-s_{l-1}+b_l\) ,在后缀修改的同时对第一项进行修正即可。
标签:00,EDU172,比赛,记录,后缀,复杂度,即可,编号,log From: https://www.cnblogs.com/sunrise1024/p/18583838