#include #define int long long using namespace std; #define fi first #define sc second #define pii pair #define pdd pair #define pb push_back #define umap unordered_map #define mset multiset #define pq priority_queue #define ull unsigned long long #define i128 __int128 #define ld long double #define fixs fixed<>1; build(ls(u),l,mid),build(rs(u),mid+1,r),pushup(u); } void upd(int u,int x,int k){ if(tr[u].l==tr[u].r) return tr[u].minn=min(tr[u].minn,k),void(); int mid=(tr[u].l+tr[u].r)>>1; if(x<=mid) upd(ls(u),x,k); else upd(rs(u),x,k); pushup(u); } int query(int u,int l,int r){ if(ir(l,r,tr[u].l,tr[u].r)) return tr[u].minn; else if(!ofr(l,r,tr[u].l,tr[u].r)) return min(query(ls(u),l,r),query(rs(u),l,r)); else return 1e18; } }sgt[2]; int n,a[maxn],x[maxn],y[maxn],f[maxn]; void solve(){ cin>>n,sgt[0].build(1,0,1e5),sgt[1].build(1,0,1e5); for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>x[i]; for(int i=1;i<=n;i++) cin>>y[i]; for(int i=1;i<=n;i++){ sgt[0].upd(1,x[i],f[i-1]-x[i]+y[i]),sgt[1].upd(1,x[i],f[i-1]+x[i]+y[i]); // for(int j=1;j<=i;j++) f[i]=min(f[i],f[j-1]+abs(a[i]-x[j])+y[j]); f[i]=min(a[i]+sgt[0].query(1,0,a[i]),sgt[1].query(1,a[i],1e5)-a[i]); } cout<>t; while(t--) solve(); return 0; } /* Samples input: output: THINGS TODO: 检查freopen,尤其是后缀名 检查空间 检查调试语句是否全部注释 */