提交时间:2024-11-14 15:05:04

运行 ID: 34769

#include<bits/stdc++.h> using namespace std; #define int long long const int N=5e5+10,M=998244353; int n,T,ans,cnt,a[N],b[N]; struct val{int x,id;}ta[N],tb[N]; int read(){ char c=getchar();int d=0,fl=1; while(c>'9'||c<'0'){ if(c=='-')fl=-1; c=getchar(); } while(c>='0'&&c<='9'){ d=d*10+c-'0';c=getchar(); } return d*fl; } bool cmp(val a,val b){return a.x<b.x;} int fa[N],rk[N]; int find_fa(int x){ if(fa[x]==x)return x; return fa[x]=find_fa(fa[x]); } void merge(int a,int b){ a=find_fa(a);b=find_fa(b); if(a==b)return; if(rk[a]>=rk[b]){fa[b]=a;rk[a]++;} else{fa[a]=b;rk[b]++;} } signed main(){ // freopen("sequence.in","r",stdin); // freopen("sequence.out","w",stdout); n=read();T=read(); for(int i=1;i<=n;i++){a[i]=read();ta[i]={a[i],i};} for(int i=1;i<=n;i++){b[i]=read();tb[i]={b[i],i};} sort(ta+1,ta+n+1,cmp);sort(tb+1,tb+n+1,cmp); for(int i=1;i<=n;i++){ans=(ans+(ta[i].x-tb[i].x)*(ta[i].x-tb[i].x)%M)%M;} if(T==0){printf("%lld\n",ans);} else{ cnt=n; for(int i=1;i<=n;i++){fa[i]=i;rk[i]=1;} for(int i=1;i<=n;i++)merge(ta[i].id,tb[i].id); for(int i=1;i<=n;i++){ if(fa[i]==i)cnt--; } printf("%lld %lld\n",ans,cnt); } // fclose(stdin);fclose(stdout); return 0; }