题意简述
有两个序列$a$和$b$,长度都是$n<=1e5$,并且$a_i,b_i<=1e9$。然后有一个矩阵$A$,其中$A[i][j]=a_i\times b_j$。找到矩阵中第$k$大的元素$k<=1e9$且$k<=n^2$。
思路
二分一个$mid$,然后找$A$中有多少个数大于$mid$。显然,$mid$越大,大于$mid$的个数就越小,满足单调性。
在一个都是整数的集合中,$x$是第$k$大,那么$x$是最小的满足大于$x$的数小于$k$个的。二分即珂。
具体思路
主要问题在于,我们如何求$A$中有多少个数比$x$大。
我们把$a$和$b$排一下序。原因是,我们只需要求$A$中第$k$大,只需要知道有哪些数就珂以了,具体的排列顺序不重要。
而排完了序以后,$A$矩阵的递增性应该是从上往下,从左往右的。(就是说,越靠下,右方的数的越大)。那么,$>x$的数所在的区域就是右下角的一片三角形区域。草图大概就长这样:
设$p_i$表示第$i$行第一个满足条件的列号,那么该行满足条件的总数量就是$n-p_i+1$。而且,$p_i$还有单调性!维护一个单调的指针即珂(数组都不用!)
代码
1 |
|