CF1095B Array Stabilization 题解

Content

有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),现在需要从这些数中删除一个数,使得 \(\max\limits_{i=1}^na_i-\min\limits_{i=1}^na_i\) 的值最小。

数据范围:\(2\leqslant n\leqslant 10^5,1\leqslant a_i\leqslant 10^5\)

Solution

先给这些数排个序,设最大数为 \(a_{\max}\),第二大数为 \(a'_{\max}\),第二小数为 \(a'_{\min}\),最小数为 \(a_{\min}\)。那么由于只能够删一个数,答案就是 \(\max\{a'_{\max}-a_{\min},a_{\max}-a'_{\min}\}\)

Code

int n, a[100007];

int main() {
	getint(n);
	_for(i, 1, n)	getint(a[i]);
	sort(a + 1, a + n + 1);
	int ans = min(a[n] - a[2], a[n - 1] - a[1]);
	writeint(ans);
	return 0;
}
posted @ 2021-12-17 14:34  Eason_AC  阅读(43)  评论(0)    收藏  举报