Peking University Online Judge 3579 Median

この手の問題を最近よく見るんですけど、もしかしてベタ問の類ですか?
cinで入力するとタイムアウトするのも毎度おなじみ
類題:https://beta.atcoder.jp/contests/abc107/tasks/arc101_b
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0646

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long int ll;
static const int MAX_N = 100000;
static const int MAX_X = 1000000000;

int N;
int X[MAX_N];

int main(){
	while(scanf("%d", &N) != EOF){
		for(int i = 0; i < N; i++) scanf("%d", &X[i]);
		sort(X, X + N);
		
		ll num_diff = (ll)N * (ll)(N - 1) / 2LL;
		ll M = (num_diff % 2 == 0 ? num_diff / 2LL + 1LL : (num_diff + 1LL) / 2LL);
		
		int lb = 0, ub = MAX_X + 1;
		while(ub - lb > 1){
			int mid = lb + (ub - lb) / 2;
			ll cnt = 0;
			int j = 0;
			for(int i = 0; i < N; i++){
				for(; j < N && X[j] - X[i] < mid; j++);
				if(X[j] - X[i] >= mid) cnt += (ll)(N - j);
			}
			if(cnt >= M) lb = mid;
			else ub = mid;
		}
		
		printf("%d\n", lb);
	}
	return 0;
}