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++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <string>
#include <cmath>
#include <numeric>
using namespace std;
//void inputer();
int d[200000];
int N;
int ans = 0;
int ex = 0; //例
int sum = 0; //exより小さい数の計
int maxN = 0;
int minN = 100000;
int supN = 0; //ex以上の数の最小値（最後にいる）
int ceiN = 0; //全体の最大値

int main() {
	//入力
	cin >> N;
	for (int i = 0;i < N;i++) {
		cin >> d[i];
	}

	//正解例をみつける
	ex = 100001; //あり得る限りの最大
	while (sum != N / 2) {
		sum = 0;
		maxN = 0;
		minN = 100000;
		supN = 100000; 
		ceiN = 0; 
		for (int i = 0; i < N;i++) {
			if (d[i] < ex) {
				sum++;
				//「exより小さい数」の最大最小をはかる

				//if (d[i] < minN) {
				//	minN = d[i];
				//}
				if (d[i] > maxN) {
					maxN = d[i];
				}
			}
			else { //ex以上
				if (d[i] < supN) {
					supN = d[i];
				}
				//if (d[i] > ceiN) {
				//	ceiN = d[i];
				//}
			}
		}
		if (sum < N / 2) { //ex小さすぎ(ありえん)
			cout << 0 << endl;
			return 0;
		}
		if (sum > N / 2) {
			ex = maxN - 1;;
		}
	}

	//正解の全通りを数える
	ans = supN - maxN;
	cout << ans << endl;
	return 0;
}