记录编号 607641 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 3782.[CSP 2022S]策略游戏 最终得分 100
用户昵称 Gravatar孤独的氢离子 是否通过 通过
代码语言 C++ 运行时间 5.000 s
提交时间 2025-10-19 16:35:56 内存使用 41.40 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const long long INF = 1e9+ 10;
long long a[100010],b[100010],faa[100010][20],fai[100010][20],faz[100010][20],faf[100010][20],fba[100010][20],fbi[100010][20];
long long queryMax(long long a1[100010][20], int l, int r) 
{
    int t = log2(r - l + 1);
    return max(a1[l][t], a1[r - (1 << t) + 1][t]); 
}
long long queryMin(long long a1[100010][20], int l, int r)
 {
    int t = log2(r - l + 1);
    return min(a1[l][t], a1[r - (1 << t) + 1][t]);
}
int main()
{
	freopen("csp2022_game.in","r",stdin);
	freopen("csp2022_game.out","w",stdout);
	int n,m,q;
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++) 
	{
		cin>>a[i];
		faa[i][0]=a[i];fai[i][0]=a[i];
		if(a[i]>0) 
		{
			faz[i][0]=a[i];
			faf[i][0]=-1*INF;
		}
		else if(a[i]<0)
		{
			faf[i][0]=a[i];
			faz[i][0]=INF;
		}
		else 
		{
			faz[i][0]=0;
			faf[i][0]=0;
		}
	}
	for(int i=1;i<=m;i++) 
	{
		cin>>b[i];
		fba[i][0]=b[i];fbi[i][0]=b[i];
	}
	for(int i=1;i<=16;i++)
	    for(int j=1;j<=n-(1<<i)+1;j++)
	    {
	    	faa[j][i]=max(faa[j][i-1],faa[j+(1<<(i-1))][i-1]);
	    	fai[j][i]=min(fai[j][i-1],fai[j+(1<<(i-1))][i-1]);
	    	faz[j][i]=min(faz[j][i-1],faz[j+(1<<(i-1))][i-1]);
	    	faf[j][i]=max(faf[j][i-1],faf[j+(1<<(i-1))][i-1]);
		}
	for(int i=1;i<=16;i++)
	    for(int j=1;j<=m-(1<<i)+1;j++)
	    {
	    	fba[j][i]=max(fba[j][i-1],fba[j+(1<<(i-1))][i-1]);
	    	fbi[j][i]=min(fbi[j][i-1],fbi[j+(1<<(i-1))][i-1]);
		}
	for(int i=1;i<=q;i++)
	{
		int l1,r1,l2,r2;
		cin>>l1>>r1>>l2>>r2;
		long long ama=queryMax(faa,l1,r1);
		long long azmi=queryMin(faz,l1,r1);
		long long ami=queryMin(fai,l1,r1);
		long long afma=queryMax(faf,l1,r1);
		long long bma=queryMax(fba,l2,r2);
		long long bmi=queryMin(fbi,l2,r2);
//		cout<<ama<<" "<<azmi<<" "<<afma<<" "<<ami<<" "<<bma<<" "<<bmi<<" "<<endl<<" ";
		long long ans=0;
		if(bmi>=0)
		{
			if(ama<=0) ans=ama*bma;
			else  ans=ama*bmi;
		}
		else if(bma<=0)
		{
			if(ami>=0) ans=ami*bmi;
			else ans=ami*bma; 
		}
		else 
		{
			if(ami>=0) ans=ami*bmi;
			else if(ama<=0) ans=afma*bma;
			else ans=max(bma*afma,bmi*azmi);
		}
		cout<<ans<<endl;
		
		
		
//		long long azma=0,azmi=0,afma=0,afmi=0,bzma=0,bzmi=0,bfma=0,bfmi=0;
//		for(int l=l1;l<=r1;l++)
//		{
//			if(a[l]==0)
//			{
//				azmi=0;
//				afmi=0;
//			}
//			else if(a[l]>0)
//			{
//				if(azma==0)
//				{
//					azma=a[l];
//					azmi=a[l];
//				}
//				else
//				{
//					if(a[l]>azma)
//					{
//						azma=a[l];
//					}
//					else if(a[l]<azmi)
//					{
//						azmi=a[l];
//					}
//				}
//			}
//			else if(a[l]<0)
//			{
//				if(afma==0)
//				{
//					afma=a[l];
//					afmi=a[l];
//				}
//				else{
//					if(a[l]<afma)
//					{
//						afma=a[l];
//					}
//					else if(a[l]>afmi)
//					{
//						afmi=a[l];
//					}
//				}
//			}
//		}
//		for(int l=l2;l<=r2;l++)
//		{
//			if(b[l]==0)
//			{
//				bzmi=0;
//				bfmi=0;
//			}
//			else if(b[l]>0)
//			{
//				if(bzma==0)
//				{
//					bzma=b[l];
//					bzmi=b[l];
//				}
//				else
//				{
//					if(b[l]>bzma)
//					{
//						bzma=b[l];
//					}
//					else if(b[l]<bzmi)
//					{
//						bzmi=b[l];
//					}
//				}
//			}
//			else if(b[l]<0)
//			{
//				if(bfma==0)
//				{
//					bfma=b[l];
//					bfmi=b[l];
//				}
//				else{
//					if(b[l]<bfma)
//					{
//						bfma=b[l];
//					}
//					else if(b[l]>bfmi)
//					{
//						bfmi=b[l];
//					}
//				}
//			}
//		}
//		long long ans=0;
//		if((bfma==0&&bzma==0)||(afma==0&&azma==0)) ans=0;
//		else if(bfma==0)
//		{
//			if(azma!=0) ans=azma*bzmi;
//			else ans=afmi*bzma;
//		}
//		else if(bzma==0)
//		{
//			if(afma!=0) ans=afma*bfmi;
//			else ans=azmi*bfma;
//		}
//		else if(bfma!=0&&bzma!=0)
//		{
//			if(a0==0) ans==0;
//			else if(afma==0) ans=bfma*azmi;
//			else if(azma==0) ans=bzma*afmi;
//			else if(bfma!=0&&bzma!=0) ans=max(bzma*afmi,bfma*azmi);
//		}
//		cout<<ans<<endl;
	}
	
	return 0;
 }