zoukankan      html  css  js  c++  java
  • 省选模拟49 题解

    A. Manager

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

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

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

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

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

    B. GCD再放送

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

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

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

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

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

    C. dict

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

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

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

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

  • 相关阅读:
    Linux初学
    Linux初学
    EntityFramework IEnumerable,IQueryable ,Include
    EntityFramework 4/5/6 中执行自定义SQL语句
    ServiceStack Web Service 创建与调用简单示列
    ServiceStack 概念
    Couchbase 环境搭建与使用(C#)
    Redis 环境搭建与使用(C#)
    分享几段JavaScript
    Activemq 平台搭建与C#示列
  • 原文地址:https://www.cnblogs.com/skyh/p/12520583.html
Copyright © 2011-2022 走看看