#3733. New Home

本文介绍了一种评估在特定街道上居住的生活质量的方法,通过计算不同类型的商店与居住点之间的距离来衡量生活的方便程度。主要关注如何寻找包含所有类型商店的最短区间,并通过巧妙的数据结构实现高效查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

五福街是一条笔直的道路,这条道路可以看成一个数轴,街上每个建筑物的坐标都可以用一个整数来表示。小明是一位时光旅行者,他知道在这条街上,在过去现在和未来共有 nnn 个商店出现。第 iii 个商店可以使用四个整数 xi,ti,ai,bix_i, t_i, a_i, b_ixi,ti,ai,bi 描述,它们分别表示:商店的坐标、商店的类型、商店开业的年份、商店关闭的年份。

小明希望通过时光旅行,选择一个合适的时间,住在五福街上的某个地方。他给出了一份他可能选择的列表,上面包括了 qqq 个询问,每个询问用二元组(坐标,时间)表示。第 iii 对二元组用两个整数 li,yil_i, y_ili,yi 描述,分别表示选择的地点 lil_ili 和年份 yiy_iyi

现在,他想计算出在这些时间和地点居住的生活质量。他定义居住的不方便指数为:在居住的年份,离居住点最远的商店类型到居住点的距离。类型 ttt 的商店到居住点的距离定义为:在指定的年份,类型 ttt 的所有营业的商店中,到居住点距离最近的一家到居住点的距离。我们说编号为 iii 的商店在第 yyy 年在营业当且仅当 ai≤y≤bia_i \leq y \leq b_iaiybi 。注意,在某些年份中,可能在五福街上并非所有 kkk 种类型的商店都有至少一家在营业。在这种情况下,不方便指数定义为 −1。你的任务是帮助小明求出每对(坐标,时间)二元组居住的不方便指数。

范围

子任务 1(5 分):n,q≤400n,q\leq 400n,q400

子任务 2(7 分):n,q≤6×104,k≤400n,q\leq 6\times 10^4,k\leq 400n,q6×104,k400

子任务 3(10 分):n,q≤3×105n,q\leq 3\times 10^5n,q3×105,对于所有的商店ai=1,bi=108a_i=1,b_i=10^8ai=1,bi=108

子任务 4(23 分):n,q≤3×105n,q\leq 3\times 10^5n,q3×105,对于所有的商店ai=1a_i=1ai=1

子任务 5(35 分):n,q≤6×104n,q\leq 6\times 10^4n,q6×104

子任务 6(20 分):n,q≤3×105n,q\leq 3\times 10^5n,q3×105

题解

问题可转化为求以一个点为中心,最短的一段区间,使这个区间出现过所有类型的商店。
显然先二分区间长度,乍一看似乎难以用数据结构维护,其实有一个很巧妙的方法:记录每一个点前一个与它类型相同的点p,设区间为[l,r],问题就变成不能有r后的p在l之前,即使r后面的点的p都在l之后,用线段树区间查询最小值即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值