<span>省选模拟49 题解</span>

A. Manager

问题是每个子树的中位数。

每次的修改操作是改成最大值。

所以只要考虑修改前的值是 $x$,如果 $x$ 大于一个祖先的中位数,那么对中位数无影响,否则将答案更新为中位数右移一位的数即可。

然后发现只要预处理出两种答案。

每次的操作就是询问一条祖先链,这个只要用一个数据结构维护一下,支持单点修改区间查询就完事了。

 

B. GCD再放送

首先弄一个莫比乌斯反演,然后问题就转化为了对 $\gcd$ 为 $x$ 的倍数的计数。

对于每个 $x$,将每个序列分为三类。

分别是整体的 $\gcd$ 为 $x$ 的倍数、有一些前缀 $\gcd$ 为 $x$ 的倍数、有一些后缀 $\gcd$ 为 $x$ 的倍数。

然后可以将区间 $gcd$ 为 $x$ 的倍数分为几类。

对于每一类,分别用组合数计算就行了。

 

C. dict

要统计字典序严格小于另一个字符串的字符串个数,那就搞个按位确定。

枚举前面有多少位与原字符串相同,然后钦定当前位小于比较字符串的当前位即可。

然后发现每次能填的数并不多,暴力去用组合数做就是 $O(nm)$ 的,其实不断填数的过程就对应着二叉树的划分。

所以发现搞一个 $dsu on tree$,每次分两种情况:当前集合、全集减补集套路即可。

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务