Codeforces Round 910 (Div. 2) A B D
D
绝对值画图
借个图

只有两个线段不相交时,才能有增加,也就是max(a[i],b[i])<min(a[j],b[j])或者max(a[j],b[j])<min(a[i],b[i])
扫维护max(a[i],b[i])和min(a[i],b[i])
#include<iostream>
using namespace std;
#define ll long long
const ll N=200010;
ll a[N];ll b[N];
ll n;
ll mx[N];ll mi[N];
int main(){
ll T;cin>>T;
while(T--){
scanf("%lld",&n);
for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
for(ll i=1;i<=n;i++)scanf("%lld",&b[i]);
ll x,y;ll ans=0;
for(ll i=1;i<=n;i++){
mx[i]=max(a[i],b[i]);mi[i]=min(a[i],b[i]);
if(i==1)x=mx[i],y=mi[i];
x=min(x,mx[i]);y=max(y,mi[i]);
ans+=mx[i]-mi[i];
}
if(y<x){
//不换
printf("%lld\n",ans);
}
else {
printf("%lld\n",ans+(y-x)*2);
}
}
}

浙公网安备 33010602011771号