[英]More efficient approach for finding pairs
我最近遇到了一個問題,它說要找到好的一對圈數。 當通過連接第一圓上的任何點P1和第二圓上的P2時可以獲得給定距離時,形成一對良好的圓。 我們給出N個圓和Q距離。 接下來的N行包含圓心的坐標( X , Y )及其半徑R. 之后,下一個Q列出要檢查的距離。
以下限制適用:
2≤N≤10 3
1個≤Q≤5⋅105
X,Y≤|2⋅105 |
1個≤[R≤2⋅105
0≤ķ≤10 6
執行時間必須<1秒。
在這里, K是要檢查的距離。
刪除了我的代碼,因為它是正在進行的競賽的一部分
我的代碼只被部分接受了,我花了好幾個小時試圖為這個問題找到一個有效的算法。 任何人都可以為這個問題提供一個有效的方法,以便TLE得到解決?
這是我可以從頭腦中思考的可能解決方案:
至於輔助數組方法,初始化一個長度為K的數組,即10 ^ 6,所有元素最初都設置為0.現在維護所有值1的最小堆和所有值為Value 2的另一個最小堆。 現在,
aux_array = [0, 0, ... ]
curVal = 0
for i in range(0, 10^6):
while minHeapValue1.root() == i:
curVal += 1
minHeapValue1.rootPop()
while minHeapValue2.root() == i:
curVal -= 1
minHeapValue2.rootPop()
aux_array[i] = curVal
現在,如果aux_array [query_k_value]> 0,則表示存在包含query_k_value
的范圍,否則不存在。
因此,問題的總時間復雜度為O(Qlog(K)+ N 2 log(K))。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.