解説

求めたい答えは maxi=1,2,,Nmaxj=1,2,,MAiBj\displaystyle\max_{i=1,2,\dots,N}\max_{j=1,2,\dots,M}|A_i-B_j| です.

x=max(x,x)|x|=\max(x,-x) より,答えは max(maxi=1,2,,Nmaxj=1,2,,M(AiBj),maxi=1,2,,Nmaxj=1,2,,M(BjAi))\max\left(\displaystyle\max_{i=1,2,\dots,N}\max_{j=1,2,\dots,M}(A_i-B_j),\max_{i=1,2,\dots,N}\max_{j=1,2,\dots,M}(B_j-A_i)\right) と等しいです.

さらに,

  • maxi=1,2,,Nmaxj=1,2,,M(AiBj)=maxi=1,2,,NAiminj=1,2,,MBj\displaystyle\max_{i=1,2,\dots,N}\max_{j=1,2,\dots,M}(A_i-B_j)=\max_{i=1,2,\dots,N}A_i-\min_{j=1,2,\dots,M}B_j
  • maxi=1,2,,Nmaxj=1,2,,M(BjAi)=maxj=1,2,,MBjmini=1,2,,NAi\displaystyle\max_{i=1,2,\dots,N}\max_{j=1,2,\dots,M}(B_j-A_i)=\max_{j=1,2,\dots,M}B_j-\min_{i=1,2,\dots,N}A_i

であることから,結局 max(max(A)min(B),max(B)min(A))\max\left(\max(A)-\min(B),\max(B)-\min(A)\right) を求めれば良いことが分かります.

A,BA,B の最大値・最小値はそれぞれ O(N)O(N)O(M)O(M) で計算できるので,この問題は O(N+M)O(N+M) で解くことができます.

解答例(Python)