您的位置:首页 > 其它

【数学】51Nod 1421 最大MOD值

2017-10-21 07:56 357 查看
题面在这里

有个想法就是先排序,对每个ai分别找[ai,2ai−1],[2ai,3ai−1],[3ai,4ai−1]…

中的最大值

复杂度对吗?

其实这个就是调和级数:

∑i=1n1i

可以证明这个是O(ln n)的

所以总复杂度是O(n⋅ln n)

示例程序:

#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn=200005;
int n,a[maxn],ans=0;
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);
for (int i=1;i<=n;i++){
for (int l=a[i],r=2*l-1;l<=a
;l=r+1,r+=a[i])
ans=max(ans,*(lower_bound(a+i,a+n+1,r+1)-1)%a[i]);
}
printf("%d",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: