<span>模拟94 题解</span>

A. 凉宫春日的忧郁

数据范围就长得很可写高精度的样子。

可以维护高精度的高位,舍弃低位信息。

正解是取对数。

$x^y=y*log\ x$

$y!=\sum \limits_{i=1}^{y}log\ i$

然后可以直接比较两个取对之后的$double$类型。

 

 

 

B. 漫无止境的八月

显然将问题转化为差分。

单点修改转化为单点加一个值,下一位减去一个值。

区间加法转化为当前位加上一个值和$k$位后减去一个值。

然后发现可以把全部的信息都转移到最后$k$位,然后用一个变量维护$k$个数中有多少个不为$0$就完了。

然而本题其实是语文题,谁能想到出题人修改的是终止区间呢。(并不看样例解释)

 

 

 

C. 射手座之日

显然区间$[i,j]$的$lca$为区间中的$dfs$序最小值和最大值的$lca$。

所以想到分治维护最值,然后这个$lca$就并不像方案数/乘法/加法等信息可以用结合律简单维护。

部分分提示我们:通过枚举$lca$,找出有多少个区间,满足最值在$lca$的$dfs$序范围内。

然而这个似乎挺难做的,然后就完戏了。

正解要继续这个思路:

因为直接维护区间很困难,不妨考虑插入子树内每一个值的过程。

将子树内的每一个值插入序列中,检查多少个序列可以形成了连续的区间。

这个过程可以用链表(通过记录左右端点模拟)简单维护。

为了保证复杂度,选择树上启发式合并。

另一个思路是用线段树合并来维护这个过程,实际上区别并不大。

更加大神的思路是分治:

考虑分治区间$(l,mid,r)$,那么只要考虑跨过$mid$的方案。

处理出由$mid$分别拓展到左右端点的$lca$数组,设左侧的$lca$数组为白点,右侧的$lca$数组为黑点。

那么问题转化为每个黑白点对的$lca$的权值和。

暴力做树形$dp$一定是不行的,但是显然只关注$lca$处的信息,所以用虚树维护。

全部评论

相关推荐

AI牛可乐:哇,听起来你遇到了什么挑战呢!🐮牛可乐在这里,虽然小,但是勇敢又聪明,想听听你的具体情况哦!如果你愿意的话,可以点击我的头像给我私信,我们可以一起想办法应对挑战,好不好呀?🌟🎉
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务