赛后的思路永远比赛时清晰。
赛时
T1 玩了一会发现 \(a_3\sim a_7\) 一定是相邻的,所以只需要考虑两个数字即可。
答案显然有单调性,所以考虑先二分 \(a_2\),再二分 \(a_1\)。
两个二分的思路都很简单,第二个二分用 lower_bound
即可。
第一个的话其实就是模拟 lower_bound
内置,赛时调了好久才调对边界。
T2 的话看了一眼就会了,直接先跑一遍哈希,然后两个指针往中间移动就行了。
正确性的话显然。
写完 T1 和 T2 时间才 9:18,感觉今天的题比较简单啊。
开 T3,第一眼看上去像是 LCT。
看了一眼部分分,发现有一档留给手法。
那我就用个 unordered_set
加上哈希判断重边就行了,造了个样例感觉能跑过去。
开始关注 无操作2 的部分分,发现到达性相当于给一段区间加上一段等差数列,但是加的时候不但能单纯加,较大的需要覆盖较小的。
在差分数祖上考虑,思考了一下具体细节,发现相当于我需要维护一棵能够支持区间对一个值取 \(\max\),单点修改,区间查询和的线段树。
第一个操作不太好处理,我也不会。但是想了一会(好一会)发现我的取 \(\max\) 操作只会有 \(1\) 的出现,只用做区间覆盖即可。
然后开始写,写完以后过不去样例。
检查发现是我还原值的时候有问题,改完就过了。
开始跟自己的暴力对拍,发现拍出了问题,我慌了。
一看是输入假了,改了以后就拍上了。
没事干了,去想想满分做法,但是并不会。
去看看 T4,交互题,而且不会。
没事干了,去翻翻 T3 的大样例,发现有我写的部分分的样例,一试,假了/jk/jk/jk。
慌了啊,时间还剩 20min,我赶紧打开样例,保留出问题的那部分,开始狂调。
最终我得到了能卡掉我做法的这个数据:
100000 3
1 62242 12704
1 97079 28474
3 99760
因为题目数据特点主要是相对大小,所以我离散化了一下,发现又真了》
觉得是破坏了什么结构,我开始各种离散化,去掉最高位,最低位,保留后两位……,全都是真的》
不可能啊,哪有这样的数据啊,然后我红了,一直调到考试结束。
赛后
拿到了 T1 一血。
T3 继续调,发现还是调不出来,然后就弃了、
看了看别人的代码,发现有个并查集,然后我瞬间懂了啊,这档分你直接维护每个点往前能跳到的最远点就可以了啊,我赛时在想什么啊喂。
改了一下有了 60pts,放到赛时的话发现排名一名也长不了,所以也无所谓了。
以后能不能都出这么简单的题