• 考试总结 模拟93


    T1想了好多东西,什么set了,最后只写了一个暴力减枝

    T2感觉是要大力转化题意,但是没有思路

    T3根本没有想到高斯消元

    T1「二维偏序」「树状数组」

    力推大佬总结

    题意首先转化为求解sa_r>=sa_{l-1}&&sb_r>=sb_{l-1}的max{r-(l-1)}

    加上r>l之后是三维,然后大佬就各种CDQ,树套树的nb做法

    但是由于询问是max{r-(l-1)},显然就算第三维不保证,也不会更新出ans

    那么就剩二维了,似乎很常规的思路是,将一维排序,剩的一维可以用树状数组解决

    这道题目还要注意特判0

    T2 「搜索树」「转化题意」「区间DP」

    二叉搜索树的性质:对于一个节点x,其lc或rc的所有点构成的必定为一个连续的区间

    那么在建树的过程中,对于一段区间要想成为一棵子树,其必定要有一个根节点 x in [l,r]

    dp定义不难写出f[l][r]表示将[l,r]建成一颗子树之后的最优贡献,再定义一个辅助数组g[l][r]表示该最优情况下的根节点是谁

    转移f[l][r]=f[l][k-1]+f[k+1][r]+sum{a[l,r]} kin [l,r]

    考虑去优化这个O(n^3)玩意。

    首先给出结论(我也不知道大佬怎么想到的)

    k的范围缩小至[g[l][r-1],g[l+1][r]]

    证明其实比较简单:

    考虑在已经建出的[[l,r-1]的树中加入点r显然要加在g[l][r-1]的右子树的某位置

    在这种情况下想要变成最优的,只可能是将根转为g[l][r-1]的右子树的某个点

    所以kin [g[l][r-1],r]同理得kin [l,g[l+1][r]]取一个交集即可

    复杂度变成O(n^2)证明

    最外层枚举区间长度O(n)

    那么只要证每个len下枚举的sum{k}的复杂度O(n)即可

    考虑[l,r]的范围是[g[l][r-1],g[l+1][r]]

    [l+1][r+1]的范围是[g[l+1][r],g[l+2][r+1]]

    然后发现g[l+1][r]是相等的,显然每个点至多会被枚举两次

    证毕

  • 相关阅读:
    上台阶
    格子游戏
    找同乡
    约德尔测试
    hihocoder_week195奖券兑换
    hihocoder_week197逆序单词
    牛客网--数串
    hihocoder_offer收割编程练习赛55_3
    hihocoder_offer收割编程练习赛55_2
    hihocoder_offer收割编程练习赛55_1
  • 原文地址:https://www.cnblogs.com/casun547/p/11768181.html
Copyright © 2020-2023  润新知