模拟测试94
T1:
高精度复杂度不允许,但是我们只关注相对大小,所以可以对答案取对数。
lg(XY)=YlgX
lg(Y!)=Y∑i=1lgi
直接比较即可。
时间复杂度O(n)。
T2:
考虑对序列进行差分。
差分后区间加减转化为对相距k的两个数同时加上两个相反数。
在对k取模意义下开桶,用变量维护不为0的桶的个数。
修改只需修改两个点,暴力修改即可。
注意差分共有n+1个。
时间复杂度O(n)。
T3:
考虑区间比较困难,尝试换着考虑每个点是多少区间的lca。
发现如果当前节点是一个区间的lca,那么这个区间内的所有点都应在子树内。
然而反过来并不是对的,因为当前点不一定是lca,lca可能是子树内的某点。
其实这是一个自下而上的前缀和的形式,差分下就能得到答案。
考虑如何维护区间个数。
对于原序列求出一个互逆数组,然后将当前节点字数内的所有点插入序列中的对应位置,然后求出连续区间个数。
直接维护复杂度超限,可以用线段树合并维护。
线段树维护当前区间左侧和右侧分别能够到达的最远位置,和中间部分的区间数。
合并区间时分类讨论即可。
时间复杂度O(nlogn)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步