提交时间:2025-06-02 15:07:07
运行 ID: 37927
#include<bits/stdc++.h> #define pii pair<int,int> #define fi first #define se second #define mk make_pair #define ll long long #define ppc __builtin_popcountll #define clz __builtin_clzll using namespace std; const int N=2e5+10; int n; int a[N],b[N],c[N],d[N],p[N],bel[N]; pii seq[N]; ll lb(ll x){return x&(-x);} ll hb(ll x){return (x==0)?1:(1<<(63-clz(x)));} //in this problem,we can denote highbit(0)=1 void slv(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; ll ans=1e18; for(int i=0;i<=30;i++){ int U=(1<<i)-1; ll cost=0; for(int j=1;j<=n;j++) p[j]=j; for(int j=1;j<=n;j++) c[j]=a[p[j]]>>i,d[j]=a[p[j]]&U; sort(p+1,p+n+1,[](int x,int y){return d[x]<d[y];}); for(int j=1;j<=n;j++) seq[j]=mk(max(b[p[j]]-c[p[j]],0),-j); sort(seq+1,seq+n+1); for(int j=1;j<=n;j++) bel[p[-seq[j].se]]=j; for(int j=1;j<=n;j++) cost+=max(c[j]-b[j],0); ll mid=(n+1)/2,sum1=0,sum2=0; for(int i=1;i<=mid;i++) sum1+=seq[i].fi; for(int i=mid+1;i<=n;i++) sum2+=seq[i].fi; //cout<<sum1<<' '<<sum2<<' '<<cost<<endl; ll w=i+cost; ll val=seq[mid].fi; w+=val;//cout<<val<<endl; w+=1ll*mid*val-sum1; w+=sum2-1ll*(n-mid)*val; //if(w==1) cout<<"ans: "<<i<<' '<<w<<endl; ans=min(ans,w); // d[0]=0; if(i!=0) for(int j=n;j>=1;j--){ cost-=max(c[p[j]]-b[p[j]],0); cost+=max(c[p[j]]+1-b[p[j]],0); int id=p[j]; if(b[p[j]]-c[p[j]]>=1){ if(bel[p[j]]<=mid) sum1--; else sum2--; }p[0]=0;d[p[0]]=0; if(j==1||d[p[j]]!=d[p[j-1]]){ ll w=i-ppc(d[p[j]]|(hb(d[p[j]]^d[p[j-1]])-1))+1; w+=cost+i; //cout<<"w: "<<w<<endl; ll val=seq[mid].fi; if(-seq[mid].se>=j) val=max(val-1,0ll); w+=val; w+=1ll*mid*val-sum1; w+=sum2-1ll*(n-mid)*val; //if(w==1) cout<<"ans: "<<i<<' '<<j<<' '<<w<<' '<<s1.size()<<' '<<s2.size()<<' '<<sum1<<' '<<sum2<<' '<<cost<<endl; ans=min(ans,w); } } }cout<<ans<<endl; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t;cin>>t; while(t--) slv(); return 0; }