1 条题解

  • 0
    @ 2025-8-24 23:09:39

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar s4CRIF1CbUbbL3AtIAly
    僕だって空を飛べる / 雲になっていく / 風になっていく / いつかはみんな / 星になっていく

    搬运于2025-08-24 23:09:39,当前版本为作者最后更新于2025-02-11 15:39:29,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    首先考虑 AABB 固定怎么做。

    从右往左做,记 dpi,jdp_{i,j} 表示考虑到第 ii 列时第 jj 行的最优答案。

    容易发现转移可以写成一个区间加和全局取 min\min 的形式,因此可以线段树优化。具体来说,对于第 ii 列先使 [li,ri][l_i,r_i] 加上 BB,接下来查询全局 min\min,加上 AA 之后令所有数与它取 min\min

    回到原题,此时 AABB 不固定。注意到所有方案都可以写成 xx 次 A 操作 和 yy 次 B 操作,那么每次询问给出 A,BA,B 等价于查询 Ax+ByAx+By 的最小值。

    因为 A,BA,B 都是正的,所以可以求出 (x,y)(x,y) 构成的左下凸壳,查询时直接在凸包上二分。

    如何求出左下凸壳呢?可以参考 P6158 等最小乘积模型的题目中的方法(记 calc(A,B)calc(A,B) 表示 Ax+ByAx+By 最小的解 (x,y)(x,y)):

    最初用 calc(1,0)calc(1,0)calc(0,1)calc(0,1) 找出最靠左和最靠下的点,它们是左下凸壳的两端。之后对于任意两个点 A,BA,B,考虑找出离 ABAB 最远的点 CC。这可以写成叉积形式,只保留与 CC 有关的项之后可以得到 C=calc(yAyB,xBxA)C=calc(y_A-y_B,x_B-x_A)。如果此时 CC 在直线 ABAB 上说明凸壳上这两点之间不存在其他点,于是结束,否则分治处理 A,CA,CC,BC,B

    整点凸包点数的量级是 O(n23)O(n^\frac 23) 的,因此总复杂度 O(n53logn+qlogn)O(n^\frac 53\log n+q\log n)

    • 1

    信息

    ID
    11369
    时间
    5000ms
    内存
    1024MiB
    难度
    7
    标签
    递交数
    0
    已通过
    0
    上传者