首页 > 其他分享 >WGOI R1 真夏飞焰 题解.18014664

WGOI R1 真夏飞焰 题解.18014664

时间:2024-02-13 17:33:53浏览次数:20  
标签:le R1 题解 复杂度 真夏飞焰 合并 mathcal ldots log

【题目大意】

给定序列 \(a\),我们定义序列 \(a,b\) 是「\(k\) 相似」的,当且仅当对于 \(a\) 中每一个四元组 \((l_1,r_1,l_2,r_2)\),若满足 \(r_1 - l_1 + 1 = r_2 - l_2 + 1 \le k,l_2 = r_1 + 1,a_{l_1\ldots r_1} = a_{l_2 \ldots r_2}\),则有 \(b_{l_1\ldots r_1} = b_{l_2 \ldots r_2}\)。

给出 \(n\) 个限制形如 \(b_i \in [L_i,R_i]\),对 \(k \in [1,\dfrac{n}{2}]\) 求出:如果序列 \(a,b\) 是 「\(k\) 相似」的,有多少种合法的序列 \(b\),对 \(998244353\) 取模。

\(1 \le n \le 10^6,1 \le L_i \le R_i \le 10^6\)。

【题解】

WGOI 指 五哥 OI(雾

考虑朴素暴力:用并查集维护 \(b\) 的相等关系,同一个连通块内 \(b\) 相等,因此我们可以把 \(L\) 取 \(\max\),\(R\) 取 \(\min\),最终答案是所有连通块的 \(R-L+1\) 之积。枚举 \(l_1,l_2\),如果有 \(a_{l_1\ldots r_1} = a_{l_2 \ldots r_2}\),则对于 \(j \in [l_1,r_1]\),合并 \(j,j+r_1-l_1\)。判断相等可以用 SA,时间复杂度 \(\mathcal O(n^3 \log n)\),期望得分 \(10\) 分。

有一个简单优化:注意到只有 \(\mathcal O(n^2)\) 对不同的 \((i,j)\),我们对于一次区间合并操作,可以差分,最后再扫一遍一起合并,时间复杂度 \(\mathcal O(n^2 \log n)\),期望得分 \(20\) 分,但是实测如果实现精良可以得 \(40\) 分。

上面的做法有两个瓶颈:一是找到所有区间 \([i,j]\) 需要 \(\mathcal O(n^2)\) 的时间,二是合并区间需要 \(\mathcal O(n^2 \log n)\) 的时间。我们分开解决。

第一部分是套路的,其实就是找所有形如 \(\text{AA}\) 的串。用 NOI2016 优秀的拆分 的套路,对于 \(\text{|A|} = i\),在 \(j = i,2i,\ldots,ki\) 设置关键点,一个形如 \(\text{AA}\) 的串会恰好跨过两个关键点。我们枚举相邻的关键点 \(p,q\),求后缀 \(p,q\) 的最长公共前缀 \(d_1\) 和前缀 \(p,q\) 的最长公共后缀 \(d_2\),如果 \(d_1 + d_2 - 1 \ge i\),可以得到一个长度为 \(\mathcal O(i)\) 的合并区间。由调和级数,枚举关键点的复杂度为 \(\mathcal O(n \log n)\),求最长公共前后缀可以 SA \(\mathcal O(1)\) 回答。

事实上,如果你写到这里就直接提交,由于数据很强,可以获得 \(100\) 分,但是我们的复杂度还是 \(\mathcal O(n^2 \log n)\),用一个全 \(\texttt{a}\) 串即可卡满。

注意到只有 \(\mathcal O(n)\) 个点,即只有 \(\mathcal O(n)\) 次有用的合并,我们希望快速找到它们。

标签:le,R1,题解,复杂度,真夏飞焰,合并,mathcal,ldots,log
From: https://www.cnblogs.com/sunkuangzheng/p/18014667

相关文章

  • CF609D题解
    Gadgetsfordollarsandpounds题目传送门题解给一个单\(\log\)题解。“求最早完成买\(k\)样东西的天数。”——很明显的二分答案。在检验函数中,我们应当把前\(k\)小的物品费用之和与总金额作比较,其它题解大多使用直接排序的方法,于是就多了一只\(\log\)。其实没有必......
  • P4559 [JSOI2018] 列队 题解
    题目链接:列队半年前mark的题,结果现在一下子就会做了。顺便写写我的手玩过程和复杂度说明。考虑比较特殊的情况:比较特殊的,发现从黑色到红色区间我们无论咋选择,由于\(\left|a_{right}-a_{left}\right|\),这玩意如果\(right\)表示红色的一边,那么这个绝对值可以直接拆掉,那么......
  • [ARC171E] Rookhopper's Tour 题解
    题目链接首先把\(m=2\)和\(m\)为奇数的情况判掉,由于我们要对合法的摆放方案计数,而一个摆放方案要判断合法性就必须通过一组合法的移动过程,对移动的状态进行记录以此转移和优化显然没啥前途,因此我们考虑摆放方案和移动过程之间的联系。一个比较显然的观察是摆放方案和移动过......
  • 2024牛客寒假算法基础集训营2个人补题题解(K、D)
    比赛链接:2024牛客寒假算法基础集训营2K、TokitsukazeandPassword(easy)题面看着很难实际上只要暴力的东西,赛时看了眼题面就溜了血亏爆搜,枚举\(abcd\)和_可能的值,枚举的情况只有\(9*8*7*6*9=27216\)种。判断按照枚举出的对应值排列出的密码是否满足条件,满足就\(ans++\)写完......
  • Atcoder Educational DP Contest 题解
    比赛链接:Atcoderr或者题单A:Frog1常规线性dp,注意到对于每个落点来说,青蛙只能由第\(i-1\)个石头或者第\(i-2\)个石头转移得到,那么我们让\(dp[i]\)为当跳到第\(i\)个石头上的最小费用。此时显然有:\[dp_i=\min(dp_{i-1}+\left|h_i-h_{i-1}\right|,dp_{i-2}+\left|h_......
  • JOISC 2018 题解
    JOISC2018loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1简单题。根据颜色段均摊的结论,每个点到根的路径上颜色段的总和是\(O(n\logn)\)的,于是直接每次暴力找颜色段即可。复杂度\(O(n\log^2n)\)。提交记录D1T2又是计算几何。我们需要画出一条闭合折线,并且......
  • JOISC 2017 题解
    JOISC2017loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1开场放大。首先,对于一个点,它最后覆盖的一定是一个矩形,这就意味着如果我们知道了\(u,d,l,r\)操作各用了多少次,他们之间的顺序是不重要的,我们可以直接当做把一种操作做完再做剩下的操作,这样就可以做到\(O(......
  • JOISC 2016 题解
    JOISC2016loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1一开始把题目看错了,还写了棵线段树。把询问离线,倒着扫一遍,就变成了求最长不上升子序列,用树状数组维护即可。提交记录D1T2来自Kubic的神仙做法。考虑Filp一个位置和剩下所有位置,记录每个数作为答案......
  • JOISC 2015 题解
    JOISC2015loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1简单题。因为\(k\)很小,考虑依次确定最后第\(i\)位是什么。我们倒序考虑所有操作,维护最后第\(i\)位当前在第几位,就可以一直推下去。提交记录D1T2直接暴力复杂度就是\(O(k4^k)\)的,可以通过。提交......
  • JOISC 2014 题解
    JOISC2014loj上有几乎全部的题目,写了题意的就是loj上没有的。D1T1想到了最短路的做法,不过可能还需要整体二分,复杂度至少有2log。有复杂度更优秀的贪心做法。把边按时间倒序加边,然后从终点开始dfs来更新每个点可以的最晚出发时间,每条边走之后肯定就不会再让答案变优了,......