Пример #1
0
    public static void MainModule(TextReader In)
    {
        var lin = In.ReadLine().Split(' ').Select(n => int.Parse(n)).ToArray();

        A = lin[0];
        B = lin[1];
        Q = lin[2];

        var ss = new Treap <long>();
        var ts = new Treap <long>();
        var xs = new long[Q];

        for (int i = 0; i < A; i++)
        {
            ss.Insert(long.Parse(In.ReadLine()));
        }
        for (int i = 0; i < B; i++)
        {
            ts.Insert(long.Parse(In.ReadLine()));
        }
        for (int i = 0; i < Q; i++)
        {
            xs[i] = long.Parse(In.ReadLine());
        }

        const long SmallValue = -100000000000L;
        const long BigValue   = 100000000000L;

        foreach (var x in xs)
        {
            var si   = ss.FindIndex(x);
            var s0   = si <= 0 ? SmallValue : ss[si - 1];
            var s1   = si >= A ? BigValue : ss[si];
            var ti   = ts.FindIndex(x);
            var t0   = ti <= 0 ? SmallValue : ts[ti - 1];
            var t1   = ti >= B ? BigValue : ts[ti];
            var s0t0 = Math.Max(x - s0, x - t0);
            var s0t1 = (x - s0) + (t1 - x) + Math.Min((x - s0), (t1 - x));
            var s1t0 = (s1 - x) + (x - t0) + Math.Min((s1 - x), (x - t0));
            var s1t1 = Math.Max(s1 - x, t1 - x);
            var can  = new long[] { s0t0, s0t1, s1t0, s1t1, };
            Console.WriteLine(can.Min());
        }
    }