zoukankan      html  css  js  c++  java
  • 省选模拟60

    A. 摧毁图状树

       考虑一个贪心,用一个堆来维护可能候选的点。

       每次取出一个点的时候先判断是否已经被覆盖,如果没有覆盖那么覆盖他和他的k级祖先。否则直接跳过。

      发现复杂度在于叶子节点的数量。可以考虑每次直接加上叶子的答案,然后将其他距离叶子最近距离为k的点加入堆。

      这样的复杂度是调和级数*数据结构的,预处理出来所有k的答案即可。

       覆盖k级祖先的操作可以用线段树+dfs序来完成。

    B. 排列统计

       毒瘤题,至今没有调出来。

      枚举$x$这个数在位置$y$造成的贡献,令$dp[i][j][k]$表示第$i$次操作,$y$前面有$j$个大于$x$的数,k则是位置y上的数和x的大小关系和x的位置,一共分为五种情况。

      转移极其繁琐而显然,所以不写了。

      

    C. 归并排序

      考虑如果一个长度为2的区间错误会造成的影响,可以看做是较小的值变成了较大的值+0.5。

      将每个数的两种情况看成一个区间,那么一个数的答案可以由跨过这个数的区间个数得到。

      那么用树状数组来维护这个过程即可。

  • 相关阅读:
    tf.get_variable
    tf.Variable
    tf.placeholder
    conda命令详解
    linux查看程序运行时占用的内存
    ubuntu安装openssh-server
    sed命令
    二分查找
    vue简单使用
    斐波那契数列求解
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12628778.html
Copyright © 2011-2022 走看看