rt.
TLE*2,应该是哪个地方写挂了。
#include<bits/stdc++.h>
using namespace std;
typedef long long int64;
struct query{
int l,r,id;
}q[10005];
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int a[100005],b[100005],k,n,p[100005],len,s[100005],g[200005],c[100005],d[100005],m;
int64 ans[10005],res;
bool cmp(query a,query b){return p[a.l]!=p[b.l]?p[a.l]<p[b.l]:(p[a.l]&1?a.r<b.r:a.r>b.r);}
struct binarytree{
int64 t[200005];
int lowbit(int i){return (i&(-i));}
void update(int x,int y){
for(int i=x;i<=m;i+=lowbit(i)) t[i]+=y;
}
int64 querysum(int x){
int64 ret=0;
for(int i=x;i;i-=lowbit(i)) ret+=t[i];
return ret;
}
int64 getsum(int l,int r){return querysum(r)-querysum(l-1);}
}tas,tac,tbs,tbc;
void adda(int x){
res+=tbc.getsum(1,c[x])*a[x]-tbs.getsum(1,c[x]);
res+=tbs.getsum(c[x]+1,m)-a[x]*tbc.getsum(c[x]+1,m);
tac.update(c[x],1),tas.update(c[x],a[x]);
}
void dela(int x){
res-=tbc.getsum(1,c[x])*a[x]-tbs.getsum(1,c[x]);
res-=tbs.getsum(c[x]+1,m)-a[x]*tbc.getsum(c[x]+1,m);
tac.update(c[x],-1),tas.update(c[x],-a[x]);
}
void addb(int x){
res+=tac.getsum(1,d[x])*b[x]-tas.getsum(1,d[x]);
res+=tas.getsum(d[x]+1,m)-b[x]*tac.getsum(d[x]+1,m);
tbc.update(d[x],1),tbs.update(d[x],b[x]);
}
void delb(int x){
res-=tac.getsum(1,d[x])*b[x]-tas.getsum(1,d[x]);
res-=tas.getsum(d[x]+1,m)-b[x]*tac.getsum(d[x]+1,m);
tbc.update(d[x],-1),tbs.update(d[x],-b[x]);
}
signed main(){
n=read();
len=3000;
for(int i=1;i<=n;i++) a[i]=read(),g[++m]=a[i];
for(int i=1;i<=n;i++) b[i]=read(),g[++m]=b[i];
for(int i=1;i<=n;i++) p[i]=(i-1)/len+1;
sort(g+1,g+m+1);
m=unique(g+1,g+m+1)-g-1;
for(int i=1;i<=n;i++) c[i]=lower_bound(g,g+m+1,a[i])-g;
for(int i=1;i<=n;i++) d[i]=lower_bound(g,g+m+1,b[i])-g;
k=read();
for(int i=1;i<=k;i++) q[i].l=read(),q[i].r=read(),q[i].id=i;
sort(q+1,q+k+1,cmp);
int l=0,r=0;
for(int i=1;i<=k;i++){
while(q[i].l>l) adda(++l);
while(q[i].r>r) addb(++r);
while(q[i].l<l) dela(l--);
while(q[i].r<r) delb(r--);
ans[q[i].id]=res;
}
for(int i=1;i<=k;i++) cout<<ans[i]<<"\n";
return 0;
}