zoukankan      html  css  js  c++  java
  • 20200723训练记录

    打了 Comet OJ 的三道题

    A是Comet OJ - Contest #1 C

    B是Comet OJ - Contest #7 D

    C是Comet OJ - Contest #8 F

    A是一个超级恶心的状压题,但是有一个不会证明的结论可以水过去

    B一眼看出得到极值的A和B一定可以是在某个(x_i)处取到,并且(A<=B)

    发现答案式子有(A*B)

    直接从小到大维护关于A的凸包,同时B在上面查极值就好了

    用单调队列维护凸包即可

    C大毒瘤题我只会(k<=2)

    改题,发现C题题解说(k=i)的答案就是在(k=i-1)上加一个点

    因为(k=2)就是选择直径

    于是考虑以直径的一个端点为根做长链剖分,每次加入最长的长链就可以算出答案

    但是带修改就很zb

    我们发现甚至会更改直径的端点也就是根

    于是考虑lct维护

    每条实链其实就是一条长链

    由于修改只会变大,所以只需要跳每一个长链的顶端看下能否换长儿子

    就像access一样每次跳到实链顶上去看能不能换长儿子,不能换就break

    复杂度跟lct的分析类似

    最后考虑换根,由于权值只会变大,同时注意到跟一个点距离最远的点一定是直径的一个端点

    所以新直径的一个端点一定是原来直径的一个端点

    跳长链的时候注意判断是否需要换根为原来直径的另一个端点就好了

    容易发现这样换根以后长剖的结构不会改变

    于是只需要lct上打个反转标记就好了

  • 相关阅读:
    [2019 CSP-S赛前集训] [CF1037D] Valid BFS?
    [2019 CSP-S赛前集训] [洛谷P1613] 跑路
    [2019 CSP-S赛前集训] [洛谷P1967] 货车运输
    [洛谷博客] 我的洛谷博客内容搬运
    终于开通了博客
    Qt Creator 添加arm版本的qmake时的问题
    U盘挂载问题
    段错误解决办法
    printf %m
    使用pthread_create()创建线程
  • 原文地址:https://www.cnblogs.com/deaf/p/13390432.html
Copyright © 2011-2022 走看看