? #3

被同机房刚学了半年多的大神吊打了,是不是该退役了 /ll,哦对本来就是()

还是 ds 专场。


OIFHA联合训练第九场

链接:link
题解:link

时间:4h (2025.10.13 07:40~11:40)
题目数:4
难度:

A B C D
\(\color{#F39C11} 橙\) \(\color{#52C41A} 绿\) \(\color{#3498DB} 蓝\) \(\color{#BFBFBF} ?\)
*1200 *1700 *2300 *?

估分:100 + 20 + 30 + 0 = 150
得分:100 + 40 + 30 + 0 = 170
Rank:2/10+


场祭

A 签。

读题。

欸 D 是莫队吗?哦区间的移动是困难的。浪费了点时间。

开 B,想二分但是发现复杂度是恐怖的 \(O(qn \log n)\),然后想到预处理枚举每个 \(v_i\) 作为中位数,然后还是二分,但是发现动态前 \(k\) 大和不会,于是打暴力走人。

C 先有一个暴力 dp,然后是用个什么东西去优化,应该是与上一个相等的位置有关,但是不知道有什么关系,线段树也看起来没道理的样子,打暴力。

忽然发现会 B 了,抱抱我真糖动态前 \(k\) 大和那不直接 01trie 上二分就解决了吗?写写写,发现被卡空间了,没事开小一点也有 80pts,然后调调调,调了 712 年过小样例了,但是大样例与答案相差一个很小的数,然后就没时间了。


补题

被同机房刚学了半年的大神吊打了(他 180pts),是不是该退役了 /ll,哦对本来就是()

哦我 B 01trie 写挂了,忘了统计到了叶子节点时 \(k \ne 0\) 的情况了,改了就 80pts 了。

然后发现我是奶龙,直接把 01trie 换成线段树就不被卡空间了。

正解怎么 1log?2log 连 2e8 都不到,那过 2s 不很轻松啊()实测没卡常只跑了 770ms。。

补 C,妙妙题!考虑合法的转移满足什么条件,若 \(f_{j-1} \to f_i\) 是可以转移的,那么 \([j,i]\) 内出现次数为 \(1\) 的数的个数必须 \(\le p\)

\([j,i]\) 内出现次数为 \(1\) 的数的个数为 \(c_j\),然后看看这个东西是否可以从 \(i-1\) 继承过来,发现是可以的!因为只多出来一个 \(a_i\) 不会带来太大的改变,容易推出 \([pre_i+1,i]\) 内的 \(c\)\(+1\)\([pre_{pre_i}+1,pre_i]\) 内的 \(c\)\(-1\)

于是我们需要维护一个数据结构,支持 \(c_j\) 的区间 \(\pm 1\) 操作,以及统计 \(j \in [1,i]\) 内所有满足 \(c_j \le p\)\(f_{j-1}\) 之和。发现线段树是维护不了的,但是分块很容易,开个 \(O(n \sqrt n)\) 的数组 \(s_{i,j}\) 表示第 \(i\)\(c_x = j\) 对应的 \(f_{x-1}\) 之和,就可以支持上面两个操作了。

补 D,正解要可持久化线段树,故只补 \(l=1\) 的特殊性质。

因为题目中的东西是不好直接维护的,所以考虑能否转化一下变成好维护的东西。容易发现 \([l,r]\) 合法的充要条件就是 \(\max _{i=l} ^r \{a_i\} - \min_{i=l} ^r \{a_i\} = r-l\),这启发我们维护一个 \(val = (\max - \min) - (r-l)\) 状物。

然后考虑 \(r \gets r+1\) 的时候,会产生多少个以 \(r+1\) 为右端点的合法区间。考虑动态地维护所有以 \(r\) 为右端点的区间的 \(val\),发现在 \(r \gets r+1\) 后,\(val\) 产生的变化时确定的:

  • \(l\) 不会改变。
  • 所有区间的 \(val\) 中的 \(r\) 都会增加 \(1\),于是 \(val\) 便都减去 \(1\)
  • \(\max , \min\) 是等难的,故只考虑 \(\max\)。维护一个单调栈,则单调栈弹出的点的 \(\max\) 会被更新为 \(a_i\)。不过每个点的变化量是不一样的,具体地,对于 \(a_{stk_j} < a_i\),区间 \([stk_{j-1}+1 , stk_j]\) 原本的 \(\max\) 都是 \(a_{stk_j}\),所以变化量均为 \(+ (a_i - a_{stk_j})\)

发现可以线段树去维护这个过程,维护所有 \(val\)。因为上面的东西都是区间加可以做的。

看看答案怎么算,发现直接统计是困难的,因为区间加之后 \(val = 0\) 的个数就改变了,然后发现换成分块就秒了,和上一题维护类似的东西就可以了。

但是线段树真的不可以做吗?可以的!继续观察式子,发现 \(\max - \min \ge r-l\) 是恒成立的,然后注意到区间最小值以及最小值的个数是可以维护的,然后……就没了,只需要判断询问的区间内最小值是否为 \(0\) 就可以统计答案了。

调了 1h 发现线段树 merge 的时候直接 res=l 了但是没有清空 tag!我好糖呜呜/dk


天依宝宝可爱!

posted @ 2025-10-13 15:15  little__bug  阅读(26)  评论(0)    收藏  举报