NOIP2024 T4 题解

\(P11364\)

\(1\)~\(2\) 写你喜欢的暴力,复杂度\(O(qn^2logn)\),期望得分\(8pts\)

\(3\)~\(5\) 预处理每个区间的\(lca\),复杂度\(O(n^2logn+qn)\),期望得分\(20pts\)

\(14\)~\(16\)\(st\)表维护区间\(lca\),复杂度\(O(nlog^2n+qlogn)\),期望得分\(32pts\),也是本题的大众分,\(captainOI\)也拿到了。

\(6\)~\(13\)\(17\) ~ \(25\)也没啥区别,就是少做了第一步而已,直接看正解吧。

\(17\)~\(25\) 好开始解说。
首先有一个重要结论,\(dep_{lca[l,r]}=min_{i=l}^{r-1}dep_{lca(i,i+1)}\)。显然左边\(\le\)右边。设\(v=lca[l,r]\),那一定存在\(p\in[l,r-1]\),使得\(lca(p,p+1)==v\),要不然\(lca[l,r]!=v\),就矛盾了。
这样,我们令\(a_i=dep_{lca(i,i+1)}\)\(n--\),判掉\(k=1\)的情况,\(k--\)\(r--\),原问题转换成求\(max_{l\le l'\le r' \le r,r'-l'+1\ge k}(min_{i=l'}^{r'}a_i)\)
我们考虑求出\(a_i\)的极长连续段,例如,\(a=[1,2,3,2,4]\),那\(a\)的极长连续段为\([4],[3],[2,3,2,4],[1,2,3,2,4]\)。显然,极长连续段是\(O(n)\)级别的,可以用并查集在\(O(n)\)的复杂度内求出(写\(dsu\) \(on\) \(tree\),启发式合并,\(set\)的都不好,对考试来说要写最好的办法)。注意可能会求出非极长连续段,但对后面的计算不影响,所以不要紧,但要知道有这么一回事。
可以发现,原问题又可以转化成求最大的\(v\),使得存在\(a_i \ge v\)的极长连续段\([l',r']\),满足\([l',r']\)\([l,r]\)的交集长度\(\ge k\)
这个问题是一个偏序问题,若按往常一样分为包含、被包含、左相交、右相交,也可以用二维偏序解决,但是比较麻烦。因为是求最大值,所以重复计算也没关系,所以可以只分\(2\)类。第\(1\)类为\(r'\ge r\)\(l'\le r-k+1\),第\(2\)类为\(l+k-1 \le r'\le r\)\(r'-l'+1\ge k\)。第\(1\)类对\(r\)扫描线,用\(BIT\)维护;第\(2\)类对\(k\)扫描线,用线段树维护即可(当然你要是懒的话都用线段树也行)。时间复杂度\(O((n+q)logn)\),空间复杂度\(O(nlogn)\),可以通过本题。

最后来一句,相信\(NOIP\),实力到了,就一定能考出来!

posted @ 2025-08-14 14:15  captainOI  阅读(47)  评论(0)    收藏  举报