• 省选模拟70 题解


    A. 小 Y 增员操直播群

    考虑一个暴力做法,每次枚举较小的集合的大小,在判断合法之后可以直接将原问题划分为两个子问题。

    两个子问题是互不干扰的,所以直接 dp 就好了。

    然后可以发现枚举大小是没有必要的。

    考虑与元素 $n-1$ 连边的最小的点 $x$。

    如果两个集合大小相等,那么 $x=frac{n-2}{2}$,可以直接将原问题划分。

    否则将 $n$ 向左平移 $x+1$ 步,与 $n-x-1$ 连边的最小的点就是较小集合中最大的编号。

    用 vector 维护一下每个点连出的边,即可做到 $O(m log)$ 复杂度。

    B. 小 J 真爱粉交流群

    一些结论是,对于大墩而言,向上走是没有必要的。

    对于小 J 而言,每次只需要选择是否堵住大墩向下的路。

    那么对于每一层,大墩走的一定是一段连续的区间。

    大墩的决策是使总和最小,向左向右的权限是掌握在大墩手中的。

    小 J 的决策是使总和最大,在区间不完全覆盖的情况下,能否向下的权限掌控在小 J 手中。

    这样写一个 dp,每次向左向右拓展取min,向下拓展取max即可。

    C. 青青草原播种计划

    容易发现可以整个可持久化权值线段树,然后插入、删除、合并、$mex$ 都可以解决。

    问题是咋处理子集的 $mex$。

    然后有一个结论是这样的。

    一个答案 $y$ 能成为子集的 $mex$,仅当所有小于等于 $y$ 的元素加和等于 $y-1$。

    证明只要考虑小于等于 $y$ 的最大的元素就好了。

    然后有了这个结论,一个 $O(nlog^2)$ 的做法就显然了,只要每次查询区间和,如果没找到答案,那么就能够达到权值倍长的效果。

    一个 $log$ 似乎也是能做的,因为只需要判断一个区间内是否存在 $mex$ 就可以在线段树上二分。

    如果这样维护区间内最大的 下标 - 前缀和 即可,感觉这玩意应该是能维护的。

  • 相关阅读:
    Vue技巧小结(持续更新)
    Vue+Webpack常见问题(持续更新)
    webpack模块定义和使用的模式
    vue-cli笔记
    新浪微博怎么知道你没登录
    jquery页面水印插件,支持多行水印、行错开
    浏览器并发连接数(未完成)
    HTTP1.0 、1.1
    你总说时间很少
    看小说的这些年
  • 原文地址:https://www.cnblogs.com/skyh/p/12701604.html
Copyright © 2020-2023  润新知