2.8模拟赛 赛后题解
难度排序
T4<T2<T1<T3
最高得分:
前5名:
T4
由题意不难知道,每次选择拔高的区间的右端点一定是$n$,具体证明大家意会一下...
考虑$f[i][j]$表示当前选择的左区间最右不超过$i$且拔高了$j$次的答案
则$$f[i][j]=max{f[x][y]}+1(x<i,y \leq j,a[x]+y \leq a[i]+j)$$
二位树状数组维护一下即可
(看!树套树!)
时间复杂度$O(nk \cdot lognlogk)$
T2
不难想到我们换字符时的策略
(1)我们只会把别的字符换成$b_i$因为换其它字符对答案没有贡献
(2)我们不会创造许多隔开的$b_i$因为同样对答案没有贡献
于是我们考虑暴力
当我们面对一个询问$(a,b)$时我们看每一个$[l,r]$看可不可以把它用$m$次操作全变成$b$
预处理每一段区间$b$出现的次数$t_b$即可Check的时候只需看$(r-l+1)-t_b$是否$\leq m$即可
预处理时可以前缀地预处理出$[1,i]$中$b_i$的出现次数用于更新
实战中这个$O(n^2 \cdot q)$的算法好像可以跑过所有测试点...也不知道什么原理
我的做法是优化这个暴力
我们二分答案
然后枚举长度最大的串出现的位置
由于预处理出了$[1,i]$中每个$b_i$的出现次数
我们可以很快的check
由于答案不超过$n$我们可以$O(nqlog n)$过掉这道题
T1
罕见的不能区间减的数位dp
其实选这道题的时候考虑过很多版本,有很简单适合当T1的,有这道题稍加改动的。
但后来要么太简单要么太难(树套树优化树形数位dp你们知道有多酸爽不)
最后千万考虑还是放了这道原题
这道题是SGU390
bzoj题号忘了是什么了,反正题目名字应该叫“我爸是李刚”
集训队的题,思想方法比较成熟,我就不要越俎代庖了
T4
原题HNOI2016最小公倍数
考虑暴力做法,对于每一个询问,暴力加入满足询问的边,然后维护联通性和$maxp,maxq$,如果满足条件则$Yes$。
两个条件的限制似乎很难用别的数据结构优化掉,那么考虑分块,先以$p$为第一关键字,$q$为第二关键字排序,每$m^{0.5}$分成一块。然后把每一个询问归类到相应的块中,使得这个询问的$p$大于等于块的$p$最小值小于等于最大值。
依次扫每个块,把每个块的询问取出来。设当前的块号是$i$,那么我们把$1$到$i-1$的块里面的所有的边按$b$排序,
再把这个块内的询问按$q$排序。然后扫$1$到$i-1$的符合当前询问的边,加入并查集。对于i块内的边,只能暴力扫然后加入并查集了,注意处理完这个询问后,要撤销掉在该块内加入的边。
所以此题的并查集不能路径压缩,要用启发式合并或按秩合并,两者都是$logn$的,总的时间复杂度时$O(n^{1.5}logn)$。