#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6+10;
int a[maxn],b[maxn],vala[maxn],valb[maxn];
int l[maxn];
int size,n;
int cnt = 0;
struct note{
int x,y,id;
}q[maxn];
bool cmp(note a,note b)
{
if((a.x - 1) / size + 1 == (b.x - 1) / size + 1) return a.y < b.y;
return (a.x - 1) / size + 1 < (b.x - 1) / size + 1;
}
struct BIT{
int c[maxn];
void insert(int x,int k)
{
for(;x <= cnt;x += (x & (-x)))
{
c[x] += k;
}
}
int cha(int x)
{
int sum = 0;
for(;x;x -= (x & (-x)));
{
sum += c[x];
}
return sum;
}
int query(int l,int r)
{
return cha(r) - cha(l - 1);
}
}aa,cnta,bb,cntb;
int ans[maxn];
int res = 0;
void changex(int val,int fh)
{
res += fh * (cntb.query(1,a[val]) * vala[val] - bb.query(1,a[val]));
res += fh * (bb.query(a[val] + 1,cnt) - cntb.query(a[val] + 1,cnt) * vala[val]);
aa.insert(a[val],fh * vala[val]);
cnta.insert(a[val],fh);
}
void changey(int val,int fh)
{
res += fh * (cnta.query(1,b[val]) * valb[val] - aa.query(1,b[val]));
res += fh * (aa.query(b[val] + 1,cnt) - cnta.query(b[val] + 1,cnt) * valb[val]);
bb.insert(b[val],fh * valb[val]);
cntb.insert(b[val],fh);
}
signed main()
{
cin >> n;
size = sqrt(n);
for(int i = 1;i <= n;i++)
{
cin >> a[i];
vala[i] = a[i];
l[++cnt] = a[i];
}
for(int i = 1;i <= n;i++)
{
cin >> b[i];
valb[i] = b[i];
l[++cnt] = b[i];
}
sort(l + 1,l + cnt + 1);
cnt = unique(l + 1,l + cnt + 1) - l - 1;
for(int i = 1;i <= n;i++)
{
a[i] = lower_bound(l + 1,l + cnt + 1,a[i]) - l;
b[i] = lower_bound(l + 1,l + cnt + 1,b[i]) - l;
}
int k;
cin >> k;
for(int i = 1;i <= k;i++)
{
cin >> q[i].x >> q[i].y;
q[i].id = i;
}
sort(q + 1,q + k + 1,cmp);
int x = 0,y = 0;
for(int i = 1;i <= k;i++)
{
while(x > q[i].x) changex(x--,-1);
while(y > q[i].y) changey(y--,-1);
while(x < q[i].x) changex(++x,1);
while(y < q[i].y) changey(++y,1);
ans[q[i].id] = res;
}
for(int i = 1;i <= k;i++)
{
cout << ans[i] << endl;
}
return 0;
}