rt.
下面只有特殊性质的代码。
const int N=1e5+5;
int a[N],b[N],fa[N][12],ga[N][12],fb[N][12],gb[N][12];
int queryfa(int l,int r) {
int k=log2(r-l+1);
return max(fa[l][k],fa[r-(1<<k)+1][k]);
}
int queryfb(int l,int r) {
int k=log2(r-l+1);
return max(fb[l][k],fb[r-(1<<k)+1][k]);
}
int queryga(int l,int r) {
int k=log2(r-l+1);
return min(ga[l][k],ga[r-(1<<k)+1][k]);
}
int querygb(int l,int r) {
int k=log2(r-l+1);
return min(gb[l][k],gb[r-(1<<k)+1][k]);
}
int main() {
rep(i,1,n)
scanf("%lld",&a[i]),fa[i][0]=ga[i][0]=a[i];
rep(i,1,m)
scanf("%lld",&b[i]),fb[i][0]=gb[i][0]=b[i];
rep(j,1,10) {
rep(i,1,n-(1<<j)+1)
fa[i][j]=max(fa[i][j-1],fa[i+(1<<(j-1))][j-1]),
ga[i][j]=min(ga[i][j-1],ga[i+(1<<(j-1))][j-1]);
}
rep(j,1,10) {
rep(i,1,m-(1<<j)+1)
fb[i][j]=max(fb[i][j-1],fb[i+(1<<(j-1))][j-1]),
gb[i][j]=min(gb[i][j-1],gb[i+(1<<(j-1))][j-1]);
}
rep(_,1,q) {
int l1,l2,r1,r2;
scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
if(l1==r1)
printf("%lld\n",min(a[l1]*queryfb(l2,r2),a[l1]*querygb(l2,r2)));
else
printf("%lld\n",max(b[l2]*queryfa(l1,r1),b[l2]*queryga(l1,r1)));
}
return 0;
}