#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=1000005;
ll T, n;
struct node {
ll r, c, a, b;
} e[maxn];
node qn[maxn], qx[maxn];
node qqn[maxn], qqx[maxn];
ll qqnsum[maxn], qqxsum[maxn];
bool cmp(node x, node y) {
return x.r>y.r;
}
void work() {
memset(e, 0, sizeof e);
memset(qn, 0, sizeof qn);
memset(qx, 0, sizeof qx);
memset(qqn, 0, sizeof qqn);
memset(qqx, 0, sizeof qqx);
memset(qqnsum, 0, sizeof qqnsum);
memset(qqxsum, 0, sizeof qqxsum);
scanf("%lld", &n);
for(ll i=1; i<=n; i++)
scanf("%lld", &e[i].r);
for(ll i=1; i<=n; i++)
scanf("%lld", &e[i].c);
for(ll i=1; i<=n; i++) e[i].a=i;
ll pn=0, px=0, ans=0;
for(ll i=1; i<=n; i++) {
if(e[i].c<=0) pn++, qn[pn]=e[i];
else px++, qx[px]=e[i];
}
ll ppn=0, ppx=0;
for(ll i=1; i<=pn; i++) {
if(qn[i].a<i+px) ans-=qn[i].c;
else ppn++, qqn[ppn]=qn[i];
}
for(ll i=1; i<=px; i++) {
if(qx[i].a>i) ans+=qx[i].c;
else ppx++, qqx[ppx]=qx[i];
}
//printf("%lld\n", ans);
for(ll i=1; i<=ppn; i++) {
qqnsum[i]=qqnsum[i-1]+qqn[i].c;
//cout<<qqn[i].c<<" "<<qqnsum[i]<<endl;
}
//cout<<endl;
for(ll i=1; i<=ppx; i++) {
qqxsum[i]=qqxsum[i-1]+qqx[i].c;
//cout<<qqx[i].c<<" "<<qqxsum[i]<<endl;
}
//cout<<endl;
ll sum1=0, sum2=0;
for(ll i=1; i<=ppn; i++) {
sum1=max(sum1, qqnsum[ppn]-qqnsum[i]-qqn[i].c);
}
for(ll i=1; i<=ppx; i++) {
sum2=max(sum2, qqxsum[ppx]-qqxsum[i]-qqx[i].c);
}
ans+=sum1+sum2;
printf("%lld\n", ans);
//cout<<endl;
}
int main() {
// freopen("contrib3.in", "r", stdin);
// freopen("contrib3.out", "w", stdout);
scanf("%lld", &T);
while(T--) work();
return 0;
}
//113010263+2477233798334
本来以为贪心不行,但是看到有贪心过的,求调