B. Increase/Decrease/Copy
分析:因为位置不能移动,加上每一位上的差值。在处理bn+1时,如果bn+1在a和b之间则只需要加复制的一不用额外加,如果不是则记录与bn+1最相近的数。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+10;
int a[N],b[N];
void slove(){
int n;
cin>>n;
memset(a,0,sizeof a);
memset(b,0,sizeof b);
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n+1;i++)cin>>b[i];
int sum=0,s=0x3f3f3f3f;
int flag=0;
for(int i=1;i<=n;i++){
sum+=abs(a[i]-b[i]);
if((b[n+1]>=a[i]&&b[n+1]<=b[i])||(b[n+1]<=a[i]&&b[n+1]>=b[i]))flag=1;
else{
int tp=min(abs(b[n+1]-max(a[i],b[i])),abs(b[n+1]-min(a[i],b[i])));
s=min(s,tp);
}
}
if(flag==1)cout<<sum+1<<endl;
else{
cout<<sum+s+1<<endl;
}
}
signed main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--){
slove();
}
return 0;
}