Problem:
Score : 300 points

Problem Statement

Takahashi made N problems for competitive programming.
The problems are numbered 1 to N, and the difficulty of Problem i is represented as an integer d_i (the higher, the harder).

He is dividing the problems into two categories by choosing an integer K, as follows:

A problem with difficulty K or higher will be for ARCs.

A problem with difficulty lower than K will be for ABCs.

How many choices of the integer K make the number of problems for ARCs and the number of problems for ABCs the same?

Problem Statement

2 \leq N \leq 10^5

N is an even number.

1 \leq d_i \leq 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
d_1 d_2 ... d_N

Output

Print the number of choices of the integer K that make the number of problems for ARCs and the number of problems for ABCs the same.

Sample Input 1

6
9 1 4 4 6 7

Sample Output 1

2

If we choose K=5 or 6, Problem 1, 5, and 6 will be for ARCs, Problem 2, 3, and 4 will be for ABCs, and the objective is achieved.
Thus, the answer is 2.

Sample Input 2

8
9 1 14 5 5 4 4 14

Sample Output 2

0

There may be no choice of the integer K that make the number of problems for ARCs and the number of problems for ABCs the same.

Sample Input 3

14
99592 10342 29105 78532 83018 11639 92015 77204 30914 21912 34519 80835 100000 1

Sample Output 3

42685

Solution in C# (.NET Core 3.1.201) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

class Program
{
    #region library
    static bool debug = false;
    static int n = 0;
    static int m = 0;
    static int r = 0;
    static int c = 0;
    static int x = 0;
    static int y = 0;
    static string s = "";
    static string[] ss;
    static long sum = 0;
    static long cnt = 0;
    static long max = -1;
    static long min = 2147483647;
    static bool flg = false;
    static bool flg2 = false;
    static string alpha = "abcdefghijklmnopqrstuvwxyz";
    static long mod = 1000000007;
    static long[] arr;
    static char[,] map;
    static long[,] imap;
    public class Input
    {
        static readonly char[] separator = { ' ', '\r', '\n' };
        readonly StreamReader sr;
        readonly Queue<string> queue;

        public Input(string path = "")
        {
            queue = new Queue<string>();

            if (string.IsNullOrEmpty(path))
            {
                sr = new StreamReader(Console.OpenStandardInput());
            }
            else
            {
                sr = new StreamReader(path);
            }
        }

        public void SetText(IEnumerable<string> items)
        {
            foreach (var item in items)
            {
                SetText(item);
            }
        }

        public bool SetText(string s)
        {
            if (s == null) return false;

            foreach (var elem in s.Trim()
                .Split(separator, StringSplitOptions.RemoveEmptyEntries))
            {
                queue.Enqueue(elem);
            }

            return true;
        }

        public bool Any()
        {
            return queue.Any() || Read();
        }

        bool Read()
        {
            if (!SetText(sr.ReadLine())) return false;

            if (!queue.Any()) return Read();

            return queue.Any();
        }

        public string Next()
        {
            if (!queue.Any() && !Read())
            {
                return "";
            }

            return queue.Dequeue();
        }

        bool Accumulate(int n)
        {
            while (queue.Count() < n)
            {
                if (!Read()) return false;
            }

            return true;
        }

        public int NextInt()
        {
            return int.Parse(Next());
        }
        public long NextLong()
        {
            return long.Parse(Next());
        }
        public double NextDouble()
        {
            return double.Parse(Next());
        }

        T[] NextT<T>(int n, T offset, Func<string, T> parse, Func<T, T, T> add)
        {
            if (!Accumulate(n)) return null;

            var a = new T[n];

            for (int i = 0; i < n; i++)
                a[i] = add(parse(queue.Dequeue()), offset);

            return a;
        }

        public string[] Next(int n)
        {
            return NextT(n, "", x => x, (x, y) => x);
        }
        public int[] NextInt(int n, int offset = 0)
        {
            return NextT(n, offset, int.Parse, (x, y) => x + y);
        }
        public long[] NextLong(int n, long offset = 0)
        {
            return NextT(n, offset, long.Parse, (x, y) => x + y);
        }
        public double[] NextDouble(int n, double offset = 0.0)
        {
            return NextT(n, offset, double.Parse, (x, y) => x + y);
        }
    }
    static Input input;
    static int Int()
    {
        return input.NextInt();
    }
    static long Long()
    {
        return input.NextLong();
    }
    static double Double()
    {
        return input.NextDouble();
    }
    static string Text()
    {
        return input.Next();
    }
    static void wl(object obj = null)
    {
        Console.WriteLine(obj);
    }
    static void w(object obj)
    {
        Console.Write(obj);
    }
    static void Yes()
    {
        wl("YES");
    }
    static void No()
    {
        wl("NO");
    }
    static void Sum()
    {
        wl(sum);
    }
    static void Cnt()
    {
        wl(cnt);
    }
    static void SetArray(long num = -1)
    {
        if (n == 0)
        {
            n = Int();
        }
        arr = new long[n];
        for (int i = 0; i < n; i++)
        {
            if (num == -1)
                arr[i] = Int();
            else
                arr[i] = num;
        }
    }
    static void ShowArray()
    {
        for (int i = 0; i < arr.Length; i++)
        {
            if (i > 0) w(" ");
            w(arr[i]);
        }
        wl();
    }
    static void SetMap(char def = '@')
    {
        if (r == 0 && c == 0)
        {
            r = Int();
            c = Int();
        }
        map = new char[r, c];
        for (int i = 0; i < r; i++)
        {
            if (def == '@') s = Text();
            for (int j = 0; j < c; j++)
            {
                map[i, j] = (def == '@') ? s[j] : def;
            }
        }
    }
    static void SetIMap(long def = -1)
    {
        if (r == 0 && c == 0)
        {
            r = Int();
            c = Int();
        }
        imap = new long[r, c];
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                imap[i, j] = (def == -1) ? Int() : def;
            }
        }
    }
    static void ShowMap()
    {
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                w(map[i, j]);
            }
            wl();
        }
    }
    static void ShowIMap()
    {
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                w(imap[i, j]);
            }
            wl();
        }
    }
    #endregion

    #region main
    static void Main(string[] args)
    {
        var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        input = new Input();
        Solve();
        Console.Out.Flush();
    }

    public static void Solve()
    {
        try
        {
            SetArray();
            Array.Sort(arr);
            long l = arr[0];
            long r = arr[n - 1];

            long m = 0;
            while (r - l > 1)
            {
                cnt = 0;
                m = (l + r) / 2;
                for (int i = 0; i < n; i++)
                {
                    if (m >= arr[i]) cnt++;
                }

                if (cnt == n / 2)
                {
                    flg = true;
                    break;
                }
                else if (cnt < n)
                {
                    l = m;
                }
                else
                {
                    r = m;
                }
            }

            if (!flg)
            {
                wl(0);
                return;
            }

            int k = 0;
            while (m > arr[k])
            {
                k++;
            }

            wl(arr[k] - arr[k - 1]);
            
        }
        catch(Exception ex)
        {
            wl(ex);
        }
    }

    #endregion
}