zoukankan      html  css  js  c++  java
  • 9.18模拟赛

    树剖维护一下即可。

    注意多组数据要彻底清空!

    原式拆为每个区间的最大值减去最小值,分开算两个答案,如最大值

    考虑每个元素可能在哪些区间成为最大值,也就是在左边第一个比它大的和右边第一个比它大的之间,贡献就是区间个数*该元素本身

    这个区间可以通过RMQ+二分求出,总复杂度O(nlogn)

    多组数据清空!!

     来自wxl学长~
    统计每条边的贡献(即经过了几次),发现在一个图上瞎走有C(n,2)=n*(n-1)/2种方案,其中在此边子树中走的不算,非子树的不算,剩下的就是跨越这条边的数量.
    有哪些[L,R]是完全在子树中的呢?不妨考虑把子树中的点放到一个桶里,构成一个01序列,显然,一个区间[L,R]若全是1,则一定是一个在子树中的走法.
    现在的问题是,如何求一个01序列中,[L,R]均为1的个数?不难发现这个就是每段中选两个点的方案,也就是ΣC(len,2).
    因此我们要维护一个序列中的连续的1,怎么做呢?
    可以用一个map维护L,一个map维护R,这样就可以logn地插入、查询了.
    至于合并子树,可以用dsu on tree的方法,做到O(nlognlogn).
    当然,我们发现其实map有些大材小用,一个哈希表完全就可以做到这个功能,这样就是O(nlogn)的.

    未经许可,禁止搬运。
  • 相关阅读:
    第二周作业第1题——滕飞
    现代软件工程_第02周_第01题_纪梓潼
    计算机系统分类
    1,性能测试关键指标
    01,python变量
    2.7 生命周期各测试方法对比
    2.6 软件测试方法
    2.5 软件的开发文档和测试文档
    2.4 软件的开发模块
    2.3 软件的生命周期
  • 原文地址:https://www.cnblogs.com/ghostcai/p/9676767.html
Copyright © 2011-2022 走看看