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上打个反转标记就好了

  • 相关阅读:
    控件右键菜单的实现以及选中后勾选
    DataGridView控件使用
    return,continue,break的区别
    break和continue的区别 循环终止办法
    事件
    跨线程改变控件属性 线程调用带参数方法
    XML配置文件相关
    抽象类及与接口的区别
    字典
    Oracle学习第一天
  • 原文地址:https://www.cnblogs.com/deaf/p/13390432.html
Copyright © 2011-2022 走看看