B. Maximum Value
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given a sequence a consisting of n integers. Find the maximum possible value of (integer remainder of ai divided by aj), where 1 ≤ i, j ≤ n and ai ≥ aj.
Input
The first line contains integer n — the length of the sequence (1 ≤ n ≤ 2·105).
The second line contains n space-separated integers ai (1 ≤ ai ≤ 106).
Output
Print the answer to the problem.
Sample test(s)
input
3 3 4 5
output
2
题意:RT
思路:可以用nearest[i]表示离i最近且比i小的数
然后对于每个数x,暴力遍历x*2,x*3,.....,x*k,这时nearest数组派上用场了,直接由nearest[x*k]%x取最大值即可
#include
#include
#include
#include
#include
#include
using namespace std; const int MAXN = 2000010; int has[MAXN]; int nearest[MAXN]; int main() { int n; scanf("%d",&n); for(int i=0;i
=i){ mx=max(mx,nearest[j]%i); } } } printf("%d\n",mx); return 0; }