[杂题] Codeforces #632D Longest Subsequence

来源:互联网 发布:51talk软件下载 编辑:程序博客网 时间:2024/05/18 07:01

值的范围是106 ,所以可以想到直接枚举公倍数。然后就是要统计一个数的因数出现了几个。这个直接 O(nlogn)
实际上这题有一个条件弱化的思想,不需要一定是最小公倍数,大的公倍数满足,对应的最小公倍数也满足。

#include<cstdio>#include<algorithm>using namespace std;const int maxn=1000005;int n,m,a[maxn],cnt[maxn],f[maxn],_max=0,k=1;int main(){    freopen("cf632D.in","r",stdin);    freopen("cf632D.out","w",stdout);    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++){        scanf("%d",&a[i]);        if(a[i]<=m) cnt[a[i]]++;    }    for(int i=1;i<=m;i++)     for(int j=i;j<=m;j+=i) f[j]+=cnt[i];    for(int i=1;i<=m;i++) if(_max<f[i]) _max=f[i], k=i;    printf("%d %d\n",k,_max);    for(int i=1;i<=n;i++) if(k%a[i]==0) printf("%d ",i);    return 0;} 
原创粉丝点击