1. 程式人生 > >Codeforces 632D Longest Subsequence 水題

Codeforces 632D Longest Subsequence 水題

文章目錄

題意

,,m..給一個序列,求一個元素個數最多的子集,裡面所有數字的最小公倍數不超過m.\newline輸出任何一個.

題解

水題.不會做真是鍋大了. 首先一看資料範圍,10910^9.哎呦我去,怎麼做. m106.m\leq10^6. 哎呦我去,辣雞. 首先把小於或者等於mm的數字和它的下標儲存下來. 我們定義cnt[i]cnt[i]aa數組裡ii的約數出現的個數. 我們可以輕鬆地把cn

tcnt陣列在調和級數複雜度內處理出來. 接下來取出來的最大值就是cntcnt陣列的最大值,此時取出來的所有數字的最小公倍數就是最大值的下標. 最後掃一遍把所有能整除最大值下標的數字下標輸出即可. 謝謝大家.

#include<bits/stdc++.h> //Ithea Myse Valgulious
using namespace std;
const int yuzu=1e6;
typedef int fuko[yuzu|10];
fuko a,b,cnt;
int main(){
int n,m,i,x,top=0,j;
for (read(n),read(m),i=1;
i<=n;++i) if ((x=read())<=m) ++cnt[a[++top]=x],b[top]=i; for (n=top,i=m;i;--i) for (j=i<<1;j<=m;j+=i) cnt[j]+=cnt[i]; int llx=-1,p; for (i=1;i<=m;++i) if (cnt[i]>llx) llx=cnt[i],p=i; write(p),p32,write(llx),pl; for (i=1;i<=n;++i) if (p%a[i]==0) write(b[i]),p32; }