題意
給你N個在二位平面上的整點(即橫縱座標都為整數的點),以及一個距離閾值D,求有多少個整點(x,y)滿足Σ(abs(x-x[i])+abs(y-y[i]))≤D,(1≤i≤N)
思路
題目顯然是要要求某個點到給定的N個點的曼哈頓距離之和,但是如果強行列舉點,根據資料範圍顯然是不可以透過的。那麼我們仔細思考一下曼哈頓距離的性質,觀察可得我們其實可以把一個二維問題拆維到兩個一維問題。我們可以透過O(NlogN)的複雜度以內求得某個點距離這N個點的縱向距離之和並進行儲存。然後我們在以相同的方式求一遍橫向距離之和,對於每一個橫向距離之和,我們都可以找到縱向距離之和的一個區間,統計這個區間桶有多少個元素即可。注意這裡的查詢是維護的一個區間資訊,如果強行暴力迴圈就O(N*N)了,所以我們可以透過權值線段樹來維護這個查詢。至於在一個維度上求一個點到其他N個點的距離之和,我是透過字首和加二分進行維護,就推匯出了某個神秘公式,具體的看程式碼吧。
程式碼
https://atcoder.jp/contests/abc366/submissions/56570362