zoukankan      html  css  js  c++  java
  • 模拟89 题解

    A. 666

    应当注意到一个结论:

    带着一个剪贴板进行删除操作是没有意义的。

    可以转化为粘贴之后删除。

    所以直接跑spfa求最短路。

    注意到答案不超过48,所以边权超过48的边可以忽略。

    B. 1234567

    显然用莫比乌斯函数容斥。

    发现答案为$sum limits_{i=1} mu(i)frac{n}{i^2}$

    然后发现只会线性求。

    打个表发现这个东西也可以除法分块,$frac{n}{i^2}$在$n=10^18$的范围内只有一百多万个不同的取值。

    所以杜教筛莫比乌斯函数前缀和,套个平方意义下的除法分块就行了。

    做这道题确实对杜教筛有了更多的一些理解。

    因为$lfloor frac{n}{i*k} floor=lfloor frac{lfloor frac{n}{i} floor}{k} floor$这个式子,杜教筛就很强。

    C. 椎

    很有意思的一道题。

    考虑最暴力的做法做这道题(在不会平衡树的前提下)。

    按$key$值排序,每次取出$rand$值最大的一个点,并递归左右子树。

    两个点$a$,$b$的$lca$显然对应着区间$[a,b]$内$rand$值最大的点。

    而对于每个点,维护它左侧的单调栈和右侧的单调栈,该点的深度对应着两个单调栈中元素个数的和。

    似乎正确性都是显然的,所以用线段树维护单调栈来支持这个操作。

    以左侧的单调栈为例,大概思路是维护每个区间的最值,左子树中单调栈被右子树更新之后的单调栈大小。

    在询问的过程中维护已经更新的最大的元素,优先递归右子树,

    在递归出完整区间后可以继续递归进行二分,只要保证只递归一条链,复杂度严格$O(nlog^2)$

  • 相关阅读:
    二分查找
    二分排序
    How to use hdu?
    HGOI 20200721
    HGOI 20200720
    HGOI 20190719
    HGOI 20200716
    HGOI 20190714
    LCA 的一些扩展算法
    HGOI 20190711
  • 原文地址:https://www.cnblogs.com/skyh/p/11749085.html
Copyright © 2011-2022 走看看