9.27 Speed Test

9.27 Codeforces Round 975 (Div.1)

Solve : A~D (4/6)

Rank : 424

Rating : \(2164+22=2186\)

Perf : 2252 | 2242

发挥评价: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\) 的额外代价,维护一下需不需要付出即可。

posted @ 2024-09-28 11:02  Fun_Strawberry  阅读(47)  评论(0)    收藏  举报