Chika and Friendly Pairs (2019 GDCPC 广东省赛银牌题)(离散化+莫队+树状数组)

博客讲述了在2019 GDCPC广东省赛中遇到的一道银牌题,题目要求在给定数列和范围内找出friendly pairs的数量。friendly pair定义为数列中两个元素差的绝对值不超过k。由于现场解决方案未进行离散化处理,导致TLE。博主指出正确的解题思路应包括离散化、莫队算法和树状数组的应用,以降低时间复杂度。
摘要由CSDN通过智能技术生成

题意

给出一个含有n个元素的数列a和k值,询问m次,每次询问给出L,R,输出[L,R]中friendly pair的总个数。

friendly pair:对于数列位置i < j,有丨 a[i] - a[j] 丨<= k,则相当于一个friendly pair

输入数据

第一行3个整数n(1 <= n <= 27000),m(1 <= n <= 27000), k(1 <= n <= 1e9)

第二行n个整数表示数列a,每个整数不超过1e9

接下来m行表示m个询问,每行两个整数L,R

输入案例

7 5 3
2 5 7 5 1 5 6
6 6
1 3
4 6
2 4
3 4

输出案例

0

2

1

3

1

 

现场情况

当时只想到了莫队和树状数组,但是却没有离散化,而是用map数组储存,导致了时间复杂度为(n*√n*logn*logn),相对于正解多了个logn,导致无限TLE而铜牌,心塞了,就差一点点啊!

思路

需要离散化,将数列的所有元素及其+k,-k离散化,这样使用树状数组时便不需要用到map而导致时间复杂度多了个logn。

莫队就不多说了,而树状数组的思路,类似于

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值