値でソートしたのを a[0]..a[n-1] とします.
差が d 以下で作れるペアの最大数を求めたいです.
ペアの数が最大のもので, 各ペアがソート順で隣り合っているものがあることを示します.
最適解を一つ持ってきます.
この解で隣り合わないペア (a[i], a[j]) (i<j) のうち, i が最も小さいものを持ってきます.
a[i+1] が誰ともペアでないなら, このペアの代わりに (a[i], a[i+1]) をペアにすればよいです.
x = i+1 とし, a[x] とペアなのを a[y] とします.
すると, min{i, j, x, y} = i です. (x は x+1 とペアか, 隣り合わないものとペアで, (a[i], a[j]) は隣り合わない最初のペアだった.)
i < x < j < y か, i < x < y < j です.
どちらの場合も, (a[i], a[x]) と (a[j], a[y]) をペアに出来ます:
前者の場合, 下図のように,
a[x]-a[i] <= a[j]-a[i] かつ a[y]-a[j] <= a[y]-a[x]
|-----| |--|
i x j y => i x j y
|-----| |--|
後者の場合, 下図のように,
a[x]-a[i] <= a[j]-a[i] かつ a[y]-a[j] <= a[j]-a[i]
|--| |--|
i x y j => i x j y
|--------| |--|
なので, a[i] とのペアが隣り合うようにできました.
これを繰り返せば, 全部隣り合うように出来ます.
5YCk44Gn44K944O844OI44GX44Gf44Gu44KSIGFbMF0uLmFbbi0xXSDjgajjgZfjgb7jgZkuCuW3ruOBjCBkIOS7peS4i+OBp+S9nOOCjOOCi+ODmuOCouOBruacgOWkp+aVsOOCkuaxguOCgeOBn+OBhOOBp+OBmS4K44Oa44Ki44Gu5pWw44GM5pyA5aSn44Gu44KC44Gu44GnLCDlkITjg5rjgqLjgYzjgr3jg7zjg4jpoIbjgafpmqPjgorlkIjjgaPjgabjgYTjgovjgoLjga7jgYzjgYLjgovjgZPjgajjgpLnpLrjgZfjgb7jgZkuCgrmnIDpganop6PjgpLkuIDjgaTmjIHjgaPjgabjgY3jgb7jgZkuCuOBk+OBruino+OBp+mao+OCiuWQiOOCj+OBquOBhOODmuOCoiAoYVtpXSwgYVtqXSkgKGk8aikg44Gu44GG44GhLCBpIOOBjOacgOOCguWwj+OBleOBhOOCguOBruOCkuaMgeOBo+OBpuOBjeOBvuOBmS4KCmFbaSsxXSDjgYzoqrDjgajjgoLjg5rjgqLjgafjgarjgYTjgarjgoksIOOBk+OBruODmuOCouOBruS7o+OCj+OCiuOBqyAoYVtpXSwgYVtpKzFdKSDjgpLjg5rjgqLjgavjgZnjgozjgbDjgojjgYTjgafjgZkuCnggPSBpKzEg44Go44GXLCBhW3hdIOOBqOODmuOCouOBquOBruOCkiBhW3ldIOOBqOOBl+OBvuOBmS4K44GZ44KL44GoLCBtaW57aSwgaiwgeCwgeX0gPSBpIOOBp+OBmS4gKHgg44GvIHgrMSDjgajjg5rjgqLjgYssIOmao+OCiuWQiOOCj+OBquOBhOOCguOBruOBqOODmuOCouOBpywgKGFbaV0sIGFbal0pIOOBr+mao+OCiuWQiOOCj+OBquOBhOacgOWIneOBruODmuOCouOBoOOBo+OBny4pCgppIDwgeCA8IGogPCB5IOOBiywgaSA8IHggPCB5IDwgaiDjgafjgZkuCuOBqeOBoeOCieOBruWgtOWQiOOCgiwgKGFbaV0sIGFbeF0pIOOBqCAoYVtqXSwgYVt5XSkg44KS44Oa44Ki44Gr5Ye65p2l44G+44GZOgoKICAgIOWJjeiAheOBruWgtOWQiCwg5LiL5Zuz44Gu44KI44GG44GrLAogICAgYVt4XS1hW2ldIDw9IGFbal0tYVtpXSDjgYvjgaQgYVt5XS1hW2pdIDw9IGFbeV0tYVt4XQogICAgICAgICAgIHwtLS0tLXwgICAgICAgICAgICB8LS18CiAgICAgICAgaSAgeCAgaiAgeSAgPT4gIGkgIHggIGogIHkKICAgICAgICB8LS0tLS18ICAgICAgICAgfC0tfAoKICAgIOW+jOiAheOBruWgtOWQiCwg5LiL5Zuz44Gu44KI44GG44GrLAogICAgYVt4XS1hW2ldIDw9IGFbal0tYVtpXSDjgYvjgaQgYVt5XS1hW2pdIDw9IGFbal0tYVtpXQoKICAgICAgICAgICB8LS18ICAgICAgICAgICAgICAgfC0tfAogICAgICAgIGkgIHggIHkgIGogID0+ICBpICB4ICBqICB5CiAgICAgICAgfC0tLS0tLS0tfCAgICAgIHwtLXwKCuOBquOBruOBpywgYVtpXSDjgajjga7jg5rjgqLjgYzpmqPjgorlkIjjgYbjgojjgYbjgavjgafjgY3jgb7jgZfjgZ8uCuOBk+OCjOOCkue5sOOCiui/lOOBm+OBsCwg5YWo6YOo6Zqj44KK5ZCI44GG44KI44GG44Gr5Ye65p2l44G+44GZLgoK