結果

問題 No.1597 Matrix Sort
ユーザー taiga0629kyoprotaiga0629kyopro
提出日時 2021-07-09 22:12:07
言語 PyPy3
(7.3.15)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,239 bytes
コンパイル時間 227 ms
コンパイル使用メモリ 82,576 KB
実行使用メモリ 103,480 KB
最終ジャッジ日時 2024-07-01 16:43:24
合計ジャッジ時間 26,375 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 24 TLE * 3
権限があれば一括ダウンロードができます

ソースコード

diff #

n,k,p=map(int,input().split())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
a.sort()
b.sort()

####二分探索###################################

#配列は昇順にソートずみ
def bilower(a,x):
    # a[i]<=x となる最大のiを返す ない時は-1
    if len(a)==0:return -1
    mi=0
    ma=len(a)-1
    if a[0]>x:return -1
    if a[ma]<=x:return ma
    while ma-mi>1:
        mid=(ma+mi)//2
        if a[mid]<=x:mi=mid
        else:ma=mid
    return mi

def bihigher(a,x):
    # a[i]>=x となる最小のiを返す ない時は len(a)
    if len(a)==0:return 0
    mi=0
    ma=len(a)-1
    if a[ma]<x:return ma+1
    if a[0]>=x:return 0
    while ma-mi>1:
        mid=(ma+mi)//2
        if a[mid]>=x:ma=mid
        else:mi=mid
    return ma

def birange(a,l,r):
    #l<=a[i]<=r となるiの個数を返す
    left=bihigher(a,l)
    right=bilower(a,r)
    return right-left+1

################################################





def f(x):
    res=0
    for i in range(n):
        res+=birange(b,-a[i],x-a[i])
        res+=birange(b,p-a[i],x+p-a[i])
    return res

if f(0)>=k:
    print(0)
    exit()

ng=0
ok=p-1
while ok-ng>1:
    mid=(ok+ng)//2
    if f(mid)>=k:ok=mid
    else:ng=mid

print(ok)



0