[NOIP2012]开车旅行 超详细思考过程

题意简述

有n个城市,海拔高度互不相同,两城市间距离定义为海拔差的绝对值,且只能从编号小的城市前往编号大的城市。小A和小B驾驶一辆车游览这些城市,他们从某一个城市S出发,两人轮流开车(小A先开,小B后开):

  1. 每次换小B时,会前往与当前城市海拔差距最小的城市。
  2. 每次换小A时,会前往与当前城市海拔差距第二小的城市。

如果不存在下一个喜欢的城市,他们会结束旅行。另外他们不希望驾驶总路程超过x,如果前往下一个城市将会超过x,也会结束旅行。

已知n个城市的海拔高度h[i]。接下来请回答M个询问,每个询问会给定起点S、总路程限制x,求两人分别能行驶的公里数。

数据范围

1 <= n, M <= 105

0 <= x <= 109

-109 <= h[i] <= 109

分析

难点1:快速求解询问

这题的题意比较简单,主要难点是询问个数很多、数据规模特别大。

  1. 先考虑模拟的方法,复杂度将达到O(nM),一定会超时,肯定不能模拟。
  2. 再考虑预处理询问(合并处理相似询问),这需要看询问间有无共性或关联。但这些询问可能会以每一个城市作为起点,比如第一个询问给定(S=1, x=50),第二个询问给定(S=12, x=100),
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值