static long Solve(long[] s, long[] t, long x) { long ans = 1000000000000; long sl, sr, tl, tr; int i = Bisect.BisectRight(s, x); sl = s[i - 1]; sr = s[i]; int j = Bisect.BisectRight(t, x); tl = t[j - 1]; tr = t[j]; ans = Math.Max(sr, tr) - x; long d = x - Math.Min(sl, tl); ans = Math.Min(ans, d); long d_sr = sr - x; long d_tl = x - tl; long d1 = 2 * Math.Min(d_sr, d_tl) + Math.Max(d_sr, d_tl); ans = Math.Min(ans, d1); long d_sl = x - sl; long d_tr = tr - x; long d2 = 2 * Math.Min(d_tr, d_sl) + Math.Max(d_tr, d_sl); ans = Math.Min(ans, d2); return(ans); }
public static void Main() { int[] a = { 1, 2, 3, 3, 4, 4, 5 }; AssertEquals(4, Bisect.BisectRight(a, 3)); AssertEquals(2, Bisect.BisectLeft(a, 3)); double[] b = { 1.0, 2.0, 3.14, 4.28, 5.01 }; AssertEquals(2, Bisect.BisectRight(b, 3.0)); AssertEquals(2, Bisect.BisectLeft(b, 3.0)); }