样例过全WA,ST表
查看原帖
样例过全WA,ST表
853245
U____楼主2023/8/10 11:12
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5 + 10, L = 22;
template<typename T>
void read(T &x) {
    x = 0; bool f = 0;
    char c = getchar();
    for (;!isdigit(c);c=getchar()) if (c=='-') f=1;
    for (;isdigit(c);c=getchar()) x=x*10+(c^48);
    if (f) x=-x;
}
template<typename F>
inline void write(F x, char ed = '\n') {
	static short st[30];short tp=0;
	if(x<0) putchar('-'),x=-x;
	do st[++tp]=x%10,x/=10; while(x);
	while(tp) putchar('0'|st[tp--]);
	putchar(ed);
}
int n, m, q;
ll amx[N][L], amn[N][L], afx[N][L], azn[N][L];
ll bmx[N][L], bmn[N][L], lg[N];
void st() {
	lg[1] = 0;
	for(int i = 2; i <= max(n, m); i ++)
	lg[i] = lg[i >> 1] + 1;
	for(int j = 1; j <= lg[n]; j ++) {
		for(int i = 1; i + (1 << j) - 1 <= n; i ++) {
			ll k = i + (1 << (j-1));
			amx[i][j] = max(amx[i][j-1], amx[k][j-1]);
			amn[i][j] = min(amn[i][j-1], amx[k][j-1]);
			afx[i][j] = max(afx[i][j-1], afx[k][j-1]);
			azn[i][j] = min(azn[i][j-1], azn[k][j-1]);
		}
	}
	for(int j = 1; j <= lg[m]; j ++) {
		for(int i = 1; i + (1 << j) - 1 <= m; i ++) {
			ll k = i + (1 << (j-1));
			bmx[i][j] = max(bmx[i][j-1], bmx[k][j-1]);
			bmn[i][j] = min(bmn[i][j-1], bmn[k][j-1]);
		}
	}
}
int main() {
	read(n);
	read(m);
	read(q);
	for(int i = 1; i <= n; i ++) {
		int a;
		read(a);
		amn[i][0] = amx[i][0] = a;
		if(a < 0) afx[i][0] = a;
		else afx[i][0] = LONG_LONG_MIN;
		if(a >= 0) azn[i][0] = a;
		else azn[i][0] = LONG_LONG_MAX;
	}
	for(int i = 1; i <= m; i ++) {
		int b;
		read(b);
		bmx[i][0] = bmn[i][0] = b;
	}
	st();
	int la,ra,lb,rb;
	while(q --) {
		read(la);
		read(ra);
		read(lb);
		read(rb);
		ll a = lg[ra - la + 1];
		ll ka = ra - (1 << a) + 1;
		ll b = lg[rb - lb + 1];
		ll kb = rb - (1 << b) + 1;
		ll amax = max(amx[la][a], amx[ka][a]);
		ll amin = min(amn[la][a], amn[ka][a]);
		ll afmx = max(afx[la][a], afx[ka][a]);
		ll azmn = min(azn[la][a], azn[ka][a]);
		ll bmax = max(bmx[lb][b], bmx[kb][b]);
		ll bmin = min(bmn[lb][b], bmn[lb][b]);
		ll ans, bns, cns, dns;
		ans = amax * (amax >= 0 ? bmin : bmax);
		bns = amin * (amin >= 0 ? bmin : bmax);
		if(afmx != LONG_LONG_MIN) 
			cns = afmx * (afmx >= 0 ? bmin : bmax);
		if(azmn != LONG_LONG_MAX) 
			dns = azmn * (azmn >= 0 ? bmin : bmax);
		printf("%lld\n",max(ans, max(bns,max(cns,dns))));
	}
	return 0;
} 

样例过了,但全WA

2023/8/10 11:12
加载中...