题目背景
渡荆门送别
李白
渡远荆门外,来从楚国游。
山随平野尽,江入大荒流。
月下飞天镜,云生结海楼。
仍怜故乡水,万里送行舟。
题目描述
李白喜欢飞,也喜欢天鹅。
现在给出一排共 nn 只鹅的身高,李白想知道最高的鹅比其他所有鹅高多少、最矮的鹅比其他所有鹅矮多少。
请输出这两行信息。
输入格式
输入共两行。
第一行一个整数 nn 表示鹅的数目。
第二行共 nn 个整数 a_i(i=1,2,3...n)ai(i=1,2,3...n),表示第 ii 只鹅的身高。
输出格式
输出共两行。
第一行共 nn 个空格隔开的整数,第 ii 个整数表示序列中第 ii 只鹅比最高的那只鹅要矮多少。
第二行共 nn 个空格隔开的整数,第 ii 个整数表示序列中第 ii 只鹅比最矮的那只鹅要高多少。
输入输出样例
输入 #1复制
6 4 7 8 6 3 2
输出 #1复制
4 1 0 2 5 6 2 5 6 4 1 0
说明/提示
李白一共有 66 只鹅,最高的一只身高为 88,最矮的一只身高为 22,然后分别作为被减数和减数参与身高差计算可得结果。
对于 30\%30% 数据,保证 0\leq a_i\leq 30,1\leq n\leq 200≤ai≤30,1≤n≤20。
对于 100\%100% 数据,保证 0\leq a_i \leq 10^{18},1\leq n\leq 10^60≤ai≤1018,1≤n≤106 。
文字题解
题意简述
求 \max a_i - a_i, a_i-\min a_imaxai−ai,ai−minai。
问题分析
关键在于求出 \max a_imaxai 和 \min a_iminai,我们可以采用打擂台的方法,即使用变量,记录最大值和最小值,依次考虑 a_iai,将其与当前的最大值与最小值比较。
注意到本题的数据范围为 10^{18}1018,需要使用 long long 类型。最小值的初值应当大于 10^{18}1018,最大值的初值应当小于 11。
long long maxm = 0, minm = 1000000000000000001ll;
for(int i = 1; i <= n; i++) {
maxm = max(maxm, a[i]);
minm = min(minm, a[i]);
}
使用上述代码即可求出 \max a_imaxai 和 \min a_iminai。
再循环输出题目所求即可。