第k个数
[link](4080. 第k个数 - AcWing题库)
题意
给你一个
n
×
m
n times m
n×m的方格矩阵,第
i
i
i行
j
j
j列对应的元素为
i
×
j
i times j
i×j。所有元素中第
k
k
k大的元素是什么?
题解
假设将所有的元素取出后,它一定是是个不一定连续但是非递减的数列,如果某个
x
x
x满足于在它之前有
≥
k
ge k
≥k个元素,那么
x
x
x后面的元素也一定满足,因此具有二段性,可以二分。
考虑二分值域,对应每个值看原矩阵中有多少个比他小的数,我们可以枚举每一行,对于第
i
i
i行来说所有的数应该是
i
,
2
i
,
3
i
,
.
.
.
,
m
i
i,2i,3i,...,mi
i,2i,3i,...,mi,我们要找到最大
k
k
k使得
k
i
≤
x
kile x
ki≤x,也就是每一行对于小于
x
x
x的贡献为
m
i
n
(
m
(
一
行
最
多
有
m
个
数
)
,
x
/
i
)
min(m(一行最多有m个数),x/i)
min(m(一行最多有m个数),x/i),复杂度为
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)。
Code
#include
#include
#include
#include
#include
#include
#include
#include