Codeforces Round #276 (Div. 1) B. Maximum Value

来源:互联网 发布:九宫图算法应用 编辑:程序博客网 时间:2024/05/29 11:50

题目: LINK 

给定n个数 a., 求ai % aj的最大值, ai > aj .
遍历所有的aj,求ai % aj 最大,即在[aj, 2*aj-1]  [2*aj, 3*aj-1] .... [k*aj, M] 每个区间取最大值,找到其中的取模最大的即可。
复杂度大约为O(M + M/2 + M/3 + ... + 1) 即约为O(M*log(M))  M为数值最大值.

#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <string>#include <vector>#include <cmath>#include <queue>#include <map>#include <set>using namespace std; #define INF 1000000000//typedef __int64 LL; #define N 2000005int n, num[N]; int main() {int ma = 0; scanf("%d", &n); int tmp; for(int i = 1; i <= n; i ++) {scanf("%d", &tmp); num[tmp] = tmp; ma = max(ma, tmp); }for(int i = 1;i <= ma * 2; i++) {if(!num[i]) num[i] = num[i-1]; }int ans = 0; for(int i = 1;i <= ma; i++) {if(num[i] != i) continue; for(int j = i*2-1; j <= ma + i; j += i) {ans = max(ans, num[j] % i); }}cout<<ans<<endl; return 0; }


0 0
原创粉丝点击