CF1760C

题意

\(T\) 组数据,每组数据给定一个长度为 \(n\) 的序列 \(s\)。求出每个数与最大值的差(最大值本身除外),以及最大值和次大值的差(最大值的位置),按照原来的顺序输出。

做法

模拟题,十分简单,只需对原序列求最大值和次大值即可,然后再按位置输出。

Code

具体实现细节见代码。

#include <iostream>
#include <cstdio>
using namespace std;
int n,a[1000001];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int mx1=0,mx2=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
			if(a[i]>mx1) mx2=mx1,mx1=a[i];//注意当最大值要被更新时,要先将原来的最大值赋值给次大值
			else if(a[i]>mx2) mx2=a[i];
		}
		for(int i=1;i<=n;i++)
		{
			if(a[i]==mx1) cout<<mx1-mx2<<' ';
			else cout<<a[i]-mx1<<' ';
		}
		cout<<endl;
	}
	return 0;
}
posted @ 2024-01-20 17:48  liyilang2021  阅读(4)  评论(0编辑  收藏  举报