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

题目


分析

首先,显然要排序去重,考虑最大值应该是(a_{n-1})(排序后)
那次大值只有可能出现在(a_{n-2})或者(a_nmod a_{n-1})
当然去重后如果只有一个数那显然就是(-1)
简单证明一下,
首先这两个一定是严格小于(a_{n-1})
然后如果其中某个数对(a_{n-k},kgeq 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]));
} 
原文地址:https://www.cnblogs.com/Spare-No-Effort/p/13775711.html