题意:给出一个数列a, 让你求ai mod aj 的最大值,且ai>aj
思路:枚举+二分、 枚举每一个数的倍数,要使得结果最大肯定要找到小于这个倍数的最大值,这一注意最后要加的那一句代码、
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int qq = 200000+10;
int num[qq];
int main(){
int n;scanf("%d",&n);
for(int i=0; i<n; ++i) scanf("%d",num+i);
sort(num, num+n);
int ans = 0;
for(int i=0; i<n; ++i){
if(num[i]==num[i-1]) continue;
if(ans>=num[i]) break;
int tmp = 2*num[i];
do{
int id = lower_bound(num, num+n, tmp)-num;
id = id-1;
ans = max(ans, num[id]%num[i]);
tmp+=num[i];
}while(tmp<=num[n-1]);
ans = max(ans, num[n-1]%num[i]); //一定得加这一句,不然这个情况可能遍历不到、
}
//printf("%d\n", *(lower_bound(num, num+n, 9)-1));
printf("%d\n", ans);
return 0;
}