ST表,悬关,0分求调
查看原帖
ST表,悬关,0分求调
1046636
YFF1楼主2024/8/14 22:36
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,k,x[100005],y[100005],l1,r1,l2,r2;
int stx1[100005][55],std1[100005][55];
int stx2[100005][55],std2[100005][55];
int nfx[100005][55],yfd[100005][55];
int a,b,c,d,sum[100005],sum2[100005],e,f;
int getd(int l,int r,int w){
	int len=log2(r-l+1);
	if(w==1)return max(std1[l][len],std1[r-(1<<len)+1][len]);
	return max(std2[l][len],std2[r-(1<<len)+1][len]);
}
int getx(int l,int r,int w){
	int len=log2(r-l+1);
	if(w==1)return min(stx1[l][len],stx1[r-(1<<len)+1][len]);
	return min(stx2[l][len],stx2[r-(1<<len)+1][len]);
}
int tox(int l,int r){
	int len=log2(r-l+1);
	return min(nfx[l][len],nfx[r-(1<<len)+1][len]);
}
int tod(int l,int r){
	int len=log2(r-l+1);
	return max(yfd[l][len],yfd[r-(1<<len)+1][len]);
}
int ft(int a,int b,int c,int d,int e,int f){
	int cnt1=min(a*c,a*d);
	int cnt2=min(b*c,b*d);
	int cnt3=min(e*c,e*d);
	int cnt4=min(f*c,f*d);
	return max(max(cnt1,cnt2),max(cnt3,cnt4));
}
signed main () {
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)scanf("%lld",&x[i]);
	for(int i=1;i<=m;i++)scanf("%lld",&y[i]);
	for(int i=1;i<=n;i++){
		stx1[i][0]=x[i];
		std1[i][0]=x[i];
		if(x[i]<0)yfd[i][0]=x[i];
		else yfd[i][0]=-1e18;
		if(x[i]>=0)nfx[i][0]=x[i];
		else nfx[i][0]=1e18;
	}
	for(int i=1;i<=m;i++){
		stx2[i][0]=y[i];
		std2[i][0]=y[i];
	}
	for(int j=1;j<=log2(n);j++){
		for(int i=1;i<=n-(1<<j)+1;i++){
			stx1[i][j]=min(stx1[i][j-1],stx1[i+(1<<(j-1))][j-1]);
			std1[i][j]=max(std1[i][j-1],std1[i+(1<<(j-1))][j-1]);
			nfx[i][j]=min(nfx[i][j-1],nfx[i+(1<<(j-1))][j-1]);
			yfd[i][j]=max(yfd[i][j-1],yfd[i+(1<<(j-1))][j-1]);
		}
	}
	for(int j=1;j<=log2(m);j++){
		for(int i=1;i<=m-(1<<j)+1;i++){
			stx2[i][j]=min(stx2[i][j-1],stx2[i+(1<<(j-1))][j-1]);
			std2[i][j]=max(std2[i][j-1],std2[i+(1<<(j-1))][j-1]);
		}
	}
	for(int i=1;i<=k;i++){
		scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
		a=getx(l1,r1,1);
		b=getd(l1,r1,1);
		c=getx(l2,r2,2);
		d=getd(l2,r2,2);
		e=tox(l1,r1);
		f=tod(l1,r1);
		printf("%lld\n",ft(a,b,c,d,e,f));
	}
	return 0;
} 
2024/8/14 22:36
加载中...