2021湘潭邀请赛-正式赛-F-思维,偏序,二维树状数组

博客分享了一道2023年大厂机试真题,涉及矩阵操作和算法。题目要求找出满足特定条件的点对数量,即矩阵中某点的值大于另一点的值加上两者的曼哈顿距离。解题思路包括拆解绝对值、转换问题、使用二维树状数组进行离线处理和排序。博客提供了详细步骤和复杂度分析,并提示了处理坐标轴点和数组相同值的注意事项。
摘要由CSDN通过智能技术生成

2023大厂真题提交网址(含题解):

www.CodeFun2000.com(http://101.43.147.120/)

最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练习,体会真题难度。现在OJ已录入50+道2023年最新大厂真题,同时在不断的更新。同时,可以关注"塔子哥学算法"公众号获得每道题的题解。
在这里插入图片描述

题目大意:

给你一个 n ∗ m n*m nm的二维矩阵。问你有多少个点对 ( ( x , y ) , ( a , b ) ) ((x,y),(a,b)) ((x,y),(a,b))满足 a r r [ x ] [ y ] > a r r [ a ] [ b ] + ∣ x − a ∣ + ∣ y − b ∣ arr[x][y]>arr[a][b]+|x-a|+|y-b| arr[x][y]>arr[a][b]+xa+yb.即 a r r arr arr的差值大于两者曼哈顿距离.

题目思路:

1.常见套路:拆绝对值,拆成四种情况.
2.对于四种情况分别考虑。(前者为点A,前者为点B)例如:考虑点B在点A的第一象限时.式子为: a r r [ x ] [ y ] − x − y > a r r [ a ] [ b ] − a − b arr[x][y]-x-y>arr[a][b]-a-b arr[x][y]xy>arr[a][b]ab.
那么形成一个新的矩阵: b [ i ] [ j ] = a r r [ i ] [ j ] − i − j b[i][j]=arr[i][j]-i-j b[i][j]=arr[i][j]ij.
问题转化成:对于每个点 ( i , j ) (i,j) (i,j),求它与左上角形成的子矩阵中有多少个点的b数组小于该点.

解决方法:离线,对数组b排序。按升序的顺序将点插入到二维树状数组中,每次查询子矩阵的和即可。

对四个象限都这么做一遍即可.

注意点:

1.对每个点来讲,在坐标轴上的点。我们要保证这些点只被计算一次.
那么我们规定在计算1,3象限的时候包含坐标轴,而2.4象限则不包含坐标轴即可。
2.对于数组b相同值部分,要防止重复计算。

以往在一维的情况下,我们在排序的时候加判断即可(值相等的话位置逆序,这样可以保证计算不重复)。

但是在二维的情况不符合!我们要分值域插入才保证正确。具体实现看代码.

复杂度:

四遍二维树状数组,每次插入查询都是两个log,则复杂度为: O ( n 2 l o g 2 n ) O(n^2log^2n) O(n2log2n)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值