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;
}
上一篇:Hbase运维参考(项目)


下一篇:IT运维监控解决方案介绍