为什么会变成这样呢? #3(并查集维护区间)

给定长度为 n 的字符串 S 以及 m 个区间 [li,ri],记 T=S[l1,r1]++S[lm,rm],其中 S[x,y] 表示从第 x 个字符到第 y 个字符的子串。求如何重新排列 S 中字符的顺序使得 T 的字典序尽可能大。

期望复杂度: 近似 O(n)

czy's trick

S 中的每个位置有一个重要度,例如位置 l1 是最重要的,应当放 S 中最大的字符,其次是 l1+1,,r1,l2, 这些位置,且区间重复的部分以第一次出现为准。

相当于原问题变为了一个区间覆盖问题,我们只要以较快的速度跳过已经覆盖的区间即可。我们可以使用并查集维护区间,每个点对应并查集中的元素,在并查集合并的时候总是以较大的数作为父亲,则一个点的代表元就是其所在区间的右端点。

结合计数排序即可做到 O(nα(n)) 的时间复杂度。

例题:

posted @   方而静  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示