【JZOJ4737】 金色丝线将瞬间一分为二

题目

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

思路

因为是曼哈顿距离,所以x,y可以分开考虑

法1

每个点考虑单独贡献。

x贡献: x+x x ∗ 比 它 小 的 数 的 个 数 − 比 它 小 的 数 的 和 + 比 它 大 的 数 的 和 − x ∗ 比 它 大 的 数 的 个 数
y亦然。

用个splay维护一下?

时间复杂度 O(nlogn) O ( n l o g n )

然而splay竟被卡常???

法2

splay常数大,换成树状数组吧。

然而 x,y109 x , y ≤ 10 9 怎么办?

快排离散化呗。

时间复杂度 O(nlogn) O ( n l o g n )

法3

前面的方法太暴力了,动不动上数据结构。

注意这里是求临界条件,那我二分不行吗?

怎么 O(n) O ( n ) 求当前时间的距离和呢?

如果每次的x,y贡献都比前一个x,y要大就很好算吧。

但事实并非如此。

那我们就把x,y分开来,强行把它们分别排序再算。当前时间以后的点直接忽略掉就行了。

时间复杂度 O(nlogn) O ( n l o g n )

总结

  • 这种临界点问题既可以二分来做,也可以当成在线操作+查询这种数据结构题来做。
  • 不过我还是更喜欢强推数据结构的啦ヾ(๑╹◡╹)ノ”
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值