#排序,去重#洛谷 5682 [CSPJX2019]次大值

题目


分析

首先,显然要排序去重,考虑最大值应该是\(a_{n-1}\)(排序后)
那次大值只有可能出现在\(a_{n-2}\)或者\(a_n\bmod a_{n-1}\)
当然去重后如果只有一个数那显然就是\(-1\)
简单证明一下,
首先这两个一定是严格小于\(a_{n-1}\)
然后如果其中某个数对\(a_{n-k},k\geq 2\)取模答案一定小于\(a_{n-2}\)
那显然只有一种情况可能大于\(a_{n-2}\)那就是第二种情况


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
int n,a[200011];
inline signed iut(){
	rr int ans=0; rr char c=getchar();
	while (!isdigit(c)) c=getchar();
	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
	return ans; 
}
inline signed max(int a,int b){return a>b?a:b;}
signed main(){
	n=iut(); for (rr int i=1;i<=n;++i) a[i]=iut();
	sort(a+1,a+1+n),n=unique(a+1,a+1+n)-a-1;
	if (n==1) return !printf("-1");
	return !printf("%d",max(a[n-2],a[n]%a[n-1]));
} 
posted @ 2020-10-06 22:05  lemondinosaur  阅读(113)  评论(0编辑  收藏  举报