孩子卡了2h了,求调QwQ
#include<bits/stdc++.h>
using namespace std;
#define int __int128
using LL=long long;
const int maxn=1e5+10;
int L[maxn];
void Linit(int n) {
L[1]=0;
for(int i=2;i<=n;i++) L[i]=L[i/2]+1;
}
auto mmin= [](int a,int b)->int{return min(a,b);};
auto mmax= [](int a,int b)->int{return max(a,b);};
auto mabsmin= [](int a,int b)->int{return llabs(a)<llabs(b)?a:b;};
LL n;
struct STable {
int c[maxn][17];
function<int(int,int)> op;
STable(function<int(int,int)> op):op(op){};
void build() {
for(int k=1;k<=L[n];k++) {
for(int i=1;i+(1<<k)-1<=n;i++) {
c[i][k]=op(c[i][k-1],c[i+(1<<(k-1))][k-1]);
}
}
}
int query(int l,int r) {
if(l==r) return c[l][0];
int k=L[r-l+1];
return op(c[l][k],c[r-(1<<k)+1][k]);
}
} mn1(mmin),mn0(mmin),mx1(mmax),mx0(mmax),zn1(mabsmin),zn0(mabsmin),zp1(mabsmin),zp0(mabsmin);
int inf=0x3fffffffffffff3f;
main() {
LL m,q,_;
cin>>n>>m>>q;
Linit(n);
for(int i=1;i<=n;i++) cin>>_,mx0.c[i][0]=mn0.c[i][0]=_,zp0.c[i][0]=(_<0?inf:_),zn0.c[i][0]=(_>0?-inf:_);
for(int i=1;i<=m;i++) cin>>_,mx1.c[i][0]=mn1.c[i][0]=_;
mn0.build();mx0.build();zp0.build();zn0.build();
mn1.build();mx1.build();
while(q--) {
LL l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
int x,y;
if(mn1.query(l2,r2)<0) {
if(mx1.query(l2,r2)<=0) {
x=mn0.query(l1,r1);
}else {
if(mx1.query(l2,r2)*zn0.query(l1,r1)<mn1.query(l2,r2)*zp0.query(l1,r1)) x=zp0.query(l1,r1);
else x=zn0.query(l1,r1);
}
}else {
x=mx0.query(l1,r1);
}
if(x>0) {
y=mn1.query(l2,r2);
}else if(x<0) {
y=mx1.query(l2,r2);
}else y=0;
cout<<(LL)(x*y)<<'\n';
}
}