9.27 Codeforces Round 975 (Div.1)
Solve : A~D (4/6)
Rank : 424
Rating : \(2164+22=2186\)
Pref : 2252
发挥评价:Normal-
这场是速度场,A~D min=78 max=590
不过我直接犯唐,B 卡顿,C 小调,D 更是因为多测不清空,虚空吃两发 + 30min,痛失 33 delta。
CF2018A
简单题,考虑到这个位置,大胆猜一下结论就可以跑路了。
CF2018B
萌萌题目,其实很恶心。
给定长 \(n\) 的序列 \(a\),任选一点作为起点占领,接下来每次可以占领一个与当前已经占领的点相邻的点占领,设第 \(i\) 个点是第 \(b_i\) 个被占领的,要求 \(b_i\le a_i\),问存在多少个起点做得到。
首先容易发现选定起点之后变成一个前缀和一个后缀,先猜测分别满足条件就行了。
那么设起点为 \(i\),对于 \(j>i\),应有 \(a_j>j-i\),小于的情况类似。
于是维护 \(a_j-j\) 的后缀 \(\min\),前缀类似维护,就搞定了。
好的然后发现不能通过样例二,别急,不是假了。
发现有时候会无解,具体是两边分开都能满足,合起来却不行了。
此时有 \(max(a_j,a_i)\le |i-j|\) 则无解。
那么拆个式子,树状数组维护即可。
CF2018C
谁家小模拟。
题太简单,不再赘述。
CF2018D
给定序列 \(a\)(\(n\le 10^5,a_i\le 10^9\)),选定不相邻的一些点,获得收益为选中点的最大值 + 最小值 + 数量,求最大收益。
发现一个贪心:一定要选择一个最大值。
那么简单了,我们枚举最小值,中间显然选得越多越好。
考虑按大小从大到小加入,则会出现很多个连通块,尝试用并查集维护它们。
但是有时候并不总是能取到最大,因为必须保证最大值取到了,所以可能会付出 \(1\) 的额外代价,维护一下需不需要付出即可。
标签:le,9.27,最大值,Test,占领,维护,Speed,起点 From: https://www.cnblogs.com/FunStrawberry/p/18437127