提交时间:2024-11-14 16:50:42

运行 ID: 34800

#include<bits/stdc++.h> using namespace std; const int md = 998244353,N = 3e5+10; int n,T; long long int a[N],b[N],ans,ans2; map<int,int> mp; map<int,int> mp2; struct Q{ int id; long long int num; long long int num2; }c[N]; bool cmp(Q x,Q y){ return x.num2<y.num2; } bool cmp2(Q x,Q y){ return x.num<y.num; } int main(){ cin>>n>>T; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ cin>>b[i]; } for(int i=1;i<=n;i++){ c[i].num=a[i]; c[i].num2=b[i]; } sort(c+1,c+n+1,cmp); for(int i=1;i<=n;i++){ c[i].id=i; } sort(c+1,c+n+1,cmp2); for(int i=1;i<=n;i++){ //理论上来说应该排在i位置上的数现在排在c[i].id上 mp[i]=c[i].id; //现在排在c[i].id上的数应该排在i上 mp2[c[i].id]=i; } sort(a+1,a+n+1); sort(b+1,b+n+1); for(int i=1;i<=n;i++){ long long int tmp=a[i],tmp2=b[i]; if(tmp<tmp2) swap(tmp,tmp2); ans=(ans%md+(tmp-tmp2)%md*(tmp-tmp2)%md)%md; } cout<<ans%md<<" "; for(int i=1;i<=n;i++){ if(mp[i]!=i){ ans2++; int j=mp[i],k=mp2[i]; //mp2[j]表示现在排在j上的数应该排在的位置 mp[k]=j; mp2[j]=k; mp2[i]=i; mp[i]=i; } } if(T==1) cout<<ans2<<endl; return 0; }