Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
41612 baka24 【BJ】T2 C++ 通过 100 251 MS 19520 KB 1879 2026-05-15 14:54:29

Tests(20/20):


#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second #define mk make_pair #define pb push_back #define inx(u) int I=h[(u)],v=edge[I].v;I;I=edge[I].nx,v=edge[I].v int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;} const int MAXN=100010,N=100000,M=3400,B=320,t=10; // struct Edge{int v,nx;}edge[MAXN<<1];int h[MAXN],CNT;void add_side(int u,int v){edge[++CNT]={v,h[u]};h[u]=CNT;edge[++CNT]={u,h[v]};h[v]=CNT;} int n,m,ans,a[MAXN],mul[MAXN]; stack<int>st; vector<int>G[MAXN]; int cnt[MAXN]; int p[MAXN],tot; bool isp[MAXN]; void init(){ for(int i=2;i<=N;i++){ if(!isp[i])p[++tot]=i,mul[i]=-1; for(int j=1;j<=tot&&p[j]*i<=N;j++){ isp[p[j]*i]=1,mul[i*p[j]]=-mul[i]; if(i%p[j]==0){ mul[i*p[j]]=0; break; } } } mul[1]=1; } int chk(int x){ int res=0; for(auto o:G[x])res+=cnt[o]*mul[o]; return res; } void pop(){ int x=st.top(); for(auto o:G[x])cnt[o]--; st.pop(); } void push(int x){ st.push(x); for(auto o:G[x])cnt[o]++; } void slv(){ans=1; for(int i=1;i<=m;i++)a[i]=0; n=read(),m=read(); for(int i=1;i<=n;i++)a[read()]=1; for(int i=1;i<=m;i++){ for(int j=m/i;j>=1;j--)if(a[j*i]){ while(chk(j))ans=max(ans,j*st.top()),pop(); push(j); } while(!st.empty())pop(); } printf("%lld\n",ans); } signed main(){ // freopen("1.in","r",stdin);freopen("1.out","w",stdout); init();for(int i=1;i<=N;i++)for(int j=i;j<=N;j+=i)G[j].pb(i); int _=read();while(_--) slv(); // cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s\n"; return 0; }


测评信息: