예제 #1
0
파일: abc119d.cs 프로젝트: unnohideyuki/acc
    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);
    }
예제 #2
0
    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));
    }