悬赏关注
查看原帖
悬赏关注
747142
OIer_hzn楼主2023/5/27 11:56

悬赏关注

#include <iostream>
#include <climits>
using namespace std;
const int N = 1e5 + 10;
typedef long long ll;
const int M = 30;
ll ax[N][M] , an[N][M],af[N][M] , az[N][M],bx[N][M] , bn[N][M];
int l2[N];
ll ma = LONG_LONG_MAX,mi = LONG_LONG_MIN;
// qucik read
inline ll read(){
	ll res =0,f = 1;
	char c = getchar();
	while(!isdigit(c)) {
		if(c == '-') f = -1;
		c = getchar();
	}
	while(isdigit(c)){
		res = (res << 1) + (res << 3) + c - '0';
		c = getchar();
	}
	return f * res;
}
int main()
{
	ll n = read(),m = read(),q = read();
	l2[1] = 0;
	
	for(int i = 2;i <= max(n,m);i ++){
		l2[i] = l2[i / 2] + 1;
	}
	
	for(int i = 1;i <= n;i ++){
		ll x = read();
		ax[i][0] = x;
		an[i][0] = x;
		af[i][0] = (x < 0 ?  x : mi);
		az[i][0] = (x >= 0 ? x : ma);	
	}
	
	for(int i = 1;i <= m;i ++){
		ll x = read();
		bx[i][0] = bn[i][0] = x;
	}
	
	for(int i = 1;i <= l2[n];i ++){
		for(int j = 1;j +(1 << i) - 1 <= n;j ++){
			int k = j + (1 << (i - 1));
			ax[j][i] = max(ax[j][i - 1],ax[k][i - 1]);
			an[j][i] = min(an[j][i - 1],an[k][i - 1]);
			af[j][i] = max(af[j][i - 1],af[k][i - 1]);
			az[j][i] = min(az[j][i - 1],az[k][i - 1]);
		}
	}
	for(int i = 1;i <= l2[n];i ++){
		for(int j = 1;j +(1 << i) - 1 <= n;j ++){
			int k = j + (1 << (i - 1));
			bx[j][i] = max(bx[j][i - 1],bx[k][i - 1]);
			bn[j][i] = min(bn[j][i - 1],bn[k][i - 1]);	
		}
	}
	
	while(q --){
		int la = read(),ra = read(),lb = read(),rb = read();
		int s1 = l2[ra - la + 1],s2 = l2[rb - lb + 1];
		int ka = ra - (1 << s1) + 1,kb = rb - (1 << s2) + 1;
		
		ll amax = max(ax[la][s1],ax[ka][s1]);
		ll amin = min(an[la][s1],an[ka][s1]);
		ll afmax = max(af[la][s1],af[ka][s1]);
		ll azmin = max(az[la][s1],az[ka][s1]);
		ll bmax = max(bx[la][s1],bx[ka][s1]);
		ll bmin = min(bn[la][s1],bn[ka][s1]);
		
		ll ans = mi;
		ans = max(ans,amax * (amax >= 0 ? bmin : bmax));
		ans = max(ans,amin * (amin >= 0 ? bmin : bmax));
		if(afmax != mi){
			ans = max(ans,afmax * (afmax >= 0 ? bmin: bmax));
		}
		if(azmin != ma){
			ans = max(ans,azmin * (azmin >= 0 ? bmin : bmax));
		}
		printf("%lld\n",ans);
	}
 	return 0;
}

2023/5/27 11:56
加载中...