#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 100005, M = 100005;
int n, m, q;
int a[N], b[M];
int cfmin[N][25], zmin[N][25], cfmax[N][25], zmax[N][25];
int bmin[M][25], bmax[M][25];
int cclog[N];
const int maxinf = LONG_LONG_MAX, mininf = LONG_LONG_MIN;
signed main()
{
scanf("%lld %lld %lld", &n, &m, &q);
for (int i = 1; i <= n; i ++)
{
scanf("%lld", &a[i]);
zmax[i][0] = cfmin[i][0] = a[i];
cfmax[i][0] = (a[i] < 0 ? a[i] : mininf);
zmin[i][0] = (a[i] >= 0 ? a[i] : maxinf);
}
for (int i = 1; i <= m; i ++)
{
scanf("%lld", &b[i]);
bmin[i][0] = bmax[i][0] = b[i];
}
for (int i = 2; i <= max(n, m); i ++)
{
cclog[i] = cclog[i >> 1] + 1;
}
for (int j = 1; j <= cclog[n]; j ++)
{
for (int i = 1; i + (1 << j) - 1 <= n; i ++)
{
int p = i + (1 << (j - 1));
zmax[i][j] = max(zmax[i][j - 1], zmax[p][j - 1]);
cfmax[i][j] = max(cfmax[i][j - 1], cfmax[p][j - 1]);
zmin[i][j] = min(zmin[i][j - 1], zmin[p][j - 1]);
cfmin[i][j] = min(cfmin[i][j - 1], cfmin[p][j - 1]);
}
}
for (int j = 1; j <= cclog[m]; j ++)
{
for (int i = 1; i + (1 << j) - 1 <= m; i ++)
{
int p = i + (1 << (j - 1));
bmax[i][j] = max(bmax[i][j - 1], bmax[p][j - 1]);
bmin[i][j] = min(bmin[i][j - 1], bmin[p][j - 1]);
}
}
while (q --)
{
int la, ra, lb, rb;
int xa, xb, ya, yb;
scanf("%lld %lld %lld %lld", &la, &ra, &lb, &rb);
xa = cclog[ra - la + 1], xb = cclog[rb - lb + 1];
ya = ra - (1 << xa) + 1, yb = rb - (1 << xb) + 1;
int azmx = max(zmax[la][xa], zmax[ya][xa]);
int azmn = min(zmin[la][xa], zmin[ya][xa]);
int afmx = max(cfmax[la][xa], cfmax[ya][xa]);
int afmn = min(cfmin[la][xa], cfmin[ya][xa]);
int bmx = max(bmax[lb][xb], bmax[yb][xb]);
int bmn = min(bmin[lb][xb], bmin[yb][xb]);
//printf("%lld %lld %lld %lld %lld %lld\n", azmx, azmn, afmx, afmn, bmx, bmn);
int first = azmx * bmn;
int second = azmn * bmn;
int third = afmx * bmx;
int forth = afmn * bmx;
cout << max(max(first, second), max(third, forth)) << endl;
}
return 0;
}
代码抄仿照第一篇题解写的。