zoukankan      html  css  js  c++  java
  • ARC067D

    Portal

    固定了最左边到达的烧烤店和最右边之后,最右策略显然是从左往右走一遍,然后每个 ticket 用在 happiness 最大的那个商店。于是不难得到一个 (mathrm O!left(n^2m ight)) 的暴力:暴力枚举区间,每个区间算出每个 ticket 的最大 happiness。

    如果直接想用甚么 DS 维护上述操作的话,那我想不到什么方法。我们注意到这是又一道的算贡献题,每个区间的答案是由走路代价和 (m) 种 ticket 的代价共同贡献的。走路代价太好求了;我们考虑换贡献体:换成 ticket。

    对于每个 ticket,我们考虑它在 (1sim n) 的每一种取值能影响到哪些区间。显然能影响到一个区间当且仅当它在里面最大(这里涉及到有多个最大值的问题,于是可以使用惯用套路:左边严格,右边不严格来去重)。而这些区间显然是左端点构成一个区间,右端构成一个区间,这些区间的左 / 右端点非常好求,二分 / BIT 均可,单调栈可以做到不带 log。然后就是个二维差分把它贡献到区间们上去的事情了(在这一点上我 dd 了 tzc,没有我的提醒他只知道二维线段树())。

    复杂度 (mathrm O(n(n+m)))

    code

    然后听说还有包括但不限于四边形不等式的其他方法们?考虑以后补?

    珍爱生命,远离抄袭!
  • 相关阅读:
    UVA 125 Numbering Paths
    UVA 515 King
    UVA 558 Wormholes
    UVA 10801 Lift Hopping
    UVA 10896 Sending Email
    SGU 488 Dales and Hills
    HDU 3397 Sequence operation
    数据库管理工具navicat的使用
    javascript封装animate动画
    关于webpack没有全局安装下的启动命令
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-at2289.html
Copyright © 2011-2022 走看看