luogu全部RE(本地全WA)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5 + 10;
const ll MIN = 1e18 + 10;
ll n,m,q;
ll amax[N][30],amin[N][30],afax[N][30],azin[N][30];
ll bmax[N][30],bmin[N][30];
ll ans;
int main(){
scanf("%lld%lld%lld",&n,&m,&q);
ll x;
for(int i = 1;i <= n;i++){
scanf("%lld",&x);
amax[i][0] = amin[i][0] = x;
if(x <= 0)
afax[i][0] = x;
else
afax[i][0] = -MIN;
if(x >= 0)
azin[i][0] = x;
else
azin[i][0] = MIN;
}
for(int i = 1;i <= m;i++){
scanf("%lld",&x);
bmax[i][0] = bmin[i][0] = x;
}
int k1 = log2(n);
for(int j = 1;j <= k1;j++){
for(int i = 1;i + (1 << j) - 1 <= n;i++){
amax[i][j] = max(amax[i][j - 1],amax[i + (1 << (j - 1))][j - 1]);
amin[i][j] = min(amin[i][j - 1],amin[i + (1 << (j - 1))][j - 1]);
afax[i][j] = max(afax[i][j - 1],afax[i + (1 << (j - 1))][j - 1]);
azin[i][j] = min(azin[i][j - 1],azin[i + (1 << (j - 1))][j - 1]);
}
}
int k2 = log2(m);
for(int j = 1;j <= k2;j++){
for(int i = 1;i + (1 << j) - 1 <= m;i++){
bmax[i][j] = max(bmax[i][j - 1],bmax[i + (1 << (j - 1))][j - 1]);
bmin[i][j] = min(bmin[i][j - 1],bmin[i + (1 << (j - 1))][j - 1]);
}
}
ll l,r,L,R;
while(q--){
scanf("%lld%lld%lld%lld",&l,&r,&L,&R);
ll l1 = log2(r - l + 1);
ll r1 = log2(R - L + 1);
ll l2 = r - (l1 * 2) + 1;
ll r2 = R - (r2 * 2) + 1;
ll mx = max(amax[l1][r1],amax[l2][r2]);
ll mn = min(amin[l1][r1],amin[l2][r2]);
ll fx = max(amax[l1][r1],amax[l2][r2]);
ll zn = min(azin[l1][r1],azin[l2][r2]);
ll bx = max(bmax[l1][r1],bmax[l2][r2]);
ll bn = min(bmin[l1][r1],bmin[l2][r2]);
if(mx >= 0)
mx *= bn;
else
mx = bx;
ans = max(ans,mx);
if(mn >= 0)
mn *= bn;
else
mn *= bx;
ans = max(ans,mn);
if(fx != MIN){
if(fx >= 0)
fx *= bn;
else
fx *= bx;
ans = max(ans,fx);
}
if(zn != MIN){
if(zn >= 0)
zn *= bn;
else
zn *= bx;
ans = max(ans,zn);
}
printf("%lld\n",ans);
}
return 0;
}