(线段树)洛谷 P2471 [SCOI2007]降雨量

原题地址

https://www.luogu.com.cn/problem/P2471

解题思路

准备

好像只有我维护了两棵线段树?

先定义一个 rain \textit{rain} rain 数组存放降雨量,默认值为大于降雨量最大值的数 INT \textit{INT} INT_ M \textit{M} M

一开始读入的时候对每个年份进行离散化处理,按照第一个年份对应 1 \textit{1} 1,得到 n \textit{n} n 个年份,对应的降雨量值存入 rain \textit{rain} rain 数组。

注意:这里 1 \textit{1} 1 n \textit{n} n 之间可能有的年份没有读入值,即不确定,它们对应的值即为 INT \textit{INT} INT_ M \textit{M} M

之后维护两棵线段树 sum \textit{sum} sum realSum \textit{realSum} realSum,均是用于维护区间降雨量的最大值。

不同的是:

sum \textit{sum} sum 维护时,降雨量按照 rain \textit{rain} rain 初始处理好的值来进行,即若查询区间内存在不确定降雨量的年份,那么返回的值必定是 INT \textit{INT} INT_ M \textit{M} M

realSum \textit{realSum} realSum 按照真实的值来进行维护,即返回区间已确定年份的最大值。

(本质都是二分查找,就是写成线段树自己方便理解…)

讨论

那么接下来就到了激动人心的讨论环节,不得不说好多好多细节要注意…那么我们一个一个来。

分析步骤:

(以下内容与代码一致,将前面输入的年份称作 x \textit{x} x,后面的称作 y \textit{y} y,其降雨量分别为 xx \textit{xx} xx yy \textit{yy} yy,年份离散化后的值为 posx \textit{posx} posx posy \textit{posy} posy。)

  1. x \textit{x} x y \textit{y} y 倒置/相同的话 false \textit{false} false

  2. 若给出的年份不全在我们已知的查询区间内,即经离散化之后不在 1 \textit{1} 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值