Language: C++

# https://maspypy.com/atcoder-%E5%8F%82%E5%8A%A0%E6%84%9F%E6%83%B3-2019-02-16abc-155
import numpy as np

N, K = map(int, input().split())
A = np.array(list(map(int, input().split())))
A.sort()
G = A[A > 0]
Z = A[A == 0]
L = A[A < 0]

ok = 10 ** 18 + 1
ng = -10 ** 18 - 1

# x以下がK個以上であるxの最小値

while ok - ng > 1:
    mid = (ng + ok) // 2
    # mid以下のペアの個数を数える

    # 正のもののうち、mid以下のペアの個数を数える
    cg = np.searchsorted(A, mid // G, side="right").sum()

    # 負のもののうちmid以下のペアの個数を数える
    cl = (N - np.searchsorted(A, (mid + 1) // L, side="right")).sum()

    # 同じ数字同士の積がmid以下のものを数える
    d = np.count_nonzero(A * A <= mid)

    # 0がmid以下なら、それもプラスするために必要
    z = 0
    if mid >= 0:
        z += len(Z) * N

    c = cg + cl + z - d

    # 二重になっているので、割る
    c //= 2

    # mid以下のペアの個数がK個以上のとき
    if c >= K:
        ok = mid
    else:
        ng = mid

print(ok)


Compiler output:
a.cc:1:3: error: invalid preprocessing directive #https
    1 | # https://maspypy.com/atcoder-%E5%8F%82%E5%8A%A0%E6%84%9F%E6%83%B3-2019-02-16abc-155
      |   ^~~~~
a.cc:14:3: error: invalid preprocessing directive #x\U00004ee5\U00004e0b\U0000304cK\U0000500b\U00004ee5\U00004e0a\U00003067\U00003042\U0000308bx\U0000306e\U00006700\U00005c0f\U00005024
   14 | # x以下がK個以上であるxの最小値
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:18:7: error: invalid preprocessing directive #mid\U00004ee5\U00004e0b\U0000306e\U000030da\U000030a2\U0000306e\U0000500b\U00006570\U00003092\U00006570\U00003048\U0000308b
   18 |     # mid以下のペアの個数を数える
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:20:7: error: extended character 、 is not valid in an identifier
   20 |     # 正のもののうち、mid以下のペアの個数を数える
      |       ^
a.cc:20:7: error: invalid preprocessing directive #\U00006b63\U0000306e\U00003082\U0000306e\U0000306e\U00003046\U00003061\U00003001mid\U00004ee5\U00004e0b\U0000306e\U000030da\U000030a2\U0000306e\U0000500b\U00006570\U00003092\U00006570\U00003048\U0000308b
   20 |     # 正のもののうち、mid以下のペアの個数を数える
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:23:7: error: invalid preprocessing directive #\U00008ca0\U0000306e\U00003082\U0000306e\U0000306e\U00003046\U00003061mid\U00004ee5\U00004e0b\U0000306e\U000030da\U000030a2\U0000306e\U0000500b\U00006570\U00003092\U00006570\U00003048\U0000308b
   23 |     # 負のもののうちmid以下のペアの個数を数える
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:26:7: error: invalid preprocessing directive #\U0000540c\U00003058\U00006570\U00005b57\U0000540c\U000058eb\U0000306e\U00007a4d\U0000304cmid\U00004ee5\U00004e0b\U0000306e\U00003082\U0000306e\U00003092\U00006570\U00003048\U0000308b
   26 |     # 同じ数字同士の積がmid以下のものを数える
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:29:7: error: extended character 、 is not valid in an identifier
   29 |     # 0がmid以下なら、それもプラスするために必要
      |       ^
a.cc:29:7: error: "0がmid以下なら、それもプラスするために必要" after # is not a positive integer
   29 |     # 0がmid以下なら、それもプラスするために必要
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:36:7: error: extended character 、 is not valid in an identifier
   36 |     # 二重になっているので、割る
      |       ^
a.cc:36:7: error: invalid preprocessing directive #\U00004e8c\U000091cd\U0000306b\U0000306a\U00003063\U00003066\U00003044\U0000308b\U0000306e\U00003067\U00003001\U00005272\U0000308b
   36 |     # 二重になっているので、割る
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:39:7: error: invalid preprocessing directive #mid\U00004ee5\U00004e0b\U0000306e\U000030da\U000030a2\U0000306e\U0000500b\U00006570\U0000304cK\U0000500b\U00004ee5\U00004e0a\U0000306e\U00003068\U0000304d
   39 |     # mid以下のペアの個数がK個以上のとき
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:2:1: error: 'import' does not name a type
    2 | import numpy as np
      | ^~~~~~
a.cc:2:1: note: C++20 'import' only available with '-fmodules-ts'