The 2024 CCPC Shandong Invitational Contest and Provincial Collegiate Programming Contest

比赛链接

C. Colorful Segments 2

考虑最小的分组数量,可以先按左端点排序,然后每次贪心地找到前面一个最大右端点 rj<li 的组加入。

考虑计数,还是同样地按左端点排序,那么假设现在有 k 个组,每个组最大右端点是 gi(没有元素则 gi=0),那么每次可以选择一个 gj<li 的组并且把 gj 更新为 li。注意到我们不需要关心具体的 gj,只用关心 gj<li 的数量。由于 li 是单增的,所以所有 gj<li 的组 j 本质相同。那么就是每次查询 gj<li 的数量,并且将其减 1,并插入一个 ri,可以用堆模拟。复杂度 Θ(nlogn)

E. Sensors

由于恰好有 1 个点的线段是有用的,且每个点不会被重新加入,那不妨考虑每次删除点的时候快速找到所有从 >1 个变成 1 个的线段,和从 1 个变成 0 个的线段。

1 个变成 0 个是好维护的,只需要把 1 个的线段插入到那个点的 vector 中,删除的时候直接减去所有的贡献即可。

>1 个变成 1 个时,线段的左右端点恰好跨越一个点。设当前剩下的点坐标是 pos1<pos2<...<posm 那么不妨用一个 multiset 维护每个 rj[posi,posi+11]lj,删除 posi 时直接把 stposi 合并到 stposi1,并访问 stposi1stposi+1 最大的 lj 更新即可。复杂度 Θ(nlog2n)

考虑更优秀的复杂度,把每个线段插入到线段树上的 logn 个节点,然后对于每个线段维护它所在的所有节点中点个数 =0,=1,>1 的节点个数,当更新一个节点 u 时,若 sumu1 就访问所有这个节点上的线段更新即可。复杂度 Θ(nlogn)

G. Cosmic Travel

差分转化为 xm 的第 k 大和,那么套路地枚举 xm 的 lcp 下一位,在 trie 上模拟前这些位(若这一位是 0,则先看 sizls,不够就到 rs,kksizls),然后拆成 Θ(logV) 个询问一个子树异或任意数(不能超过这个子树能表示的最大数)的第 ki 大和。注意到这个东西是与询问无关的,设 dpi,ji 子树异或任意数的第 j 大和,状态数量为 Θ(nlogV) 的(每个叶子统计 Θ(logV) 次)。

这里为了方便,可以把和设为只看子树里的这些位的和,类似地模拟转移即可。

复杂度 Θ((n+q)logV)

L. Intersection of Paths

考虑对于一个 k,有那些点可能成为并的一个端点,考虑每一条边 (u,v),如果删掉这条边后 min(sizu,sizv)k 这条边就合法,那么 u,v 就合法。那么假如不考虑更改边的话,答案就是只取这些点组成的虚树(一定是原树的一个联通块)的直径。

考虑 k 不同,并且加入更改边,由于大的 k 对应联通块一定被小 k 对应的完全包含,那么可以直径从小到大扫描线,每次从 kk+1 时,把 min(sizu,sizv)=k 的边删掉(更改边权为 0)。

那么就是要实现动态修改边权,查询直径。考虑在欧拉序上做,每次遍历到 u 在 dfs 序后加入 u,遍历 u每个 儿子回来后再加入 u。然后就是要找到一个区间 [l,r]maxlLaRrdepL+depR2×depa,其中 a 肯定是 [L,R]dep 最小那个。于是线段树上维护区间信息 ans,ansl,ansr,maxd,mind 对应上述答案、maxLadepL2×depamaxaRdepR2×depa,最大和最小 dep。合并时 ans=max(ansls,ansrs,anslls+maxdrs,maxdls+ansrrs)ansl=max(anslls,anslrs,maxdls2×mindrs),ansr=max(ansrls,ansrrs,maxdrs2×mindls)

显然支持修改,复杂度 Θ((n+q)logn)

本文作者:FantasyNumber

本文链接:https://www.cnblogs.com/MiniLong/p/18447323

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   FantasyNumber  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起