请求加强数据(民间数据)
查看原帖
请求加强数据(民间数据)
699110
kelanjie楼主2022/11/23 21:16

这个代码能AC,但是关于0的数据可能挂掉,放个hack数据

5 7 1
0 -9 -8 -8 -7 
10 -1 -7 3 3 -1 -3 
1 5 1 7

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,q,l1,l2,r1,r2,u1,u2,v1,v2,v3,v4;
const int N=1e6+5;
int a[N],b[N];
int Amx[N],Ami[N],Apmi[N],Anmx[N];//A-->max,min,正数min,负数max 
int Bmx[N],Bmi[N];//B-->max,min
void upd1(int rt)
{
	Amx[rt]=max(Amx[rt*2],Amx[rt*2+1]);
	Anmx[rt]=max(Anmx[rt*2],Anmx[rt*2+1]);
	Ami[rt]=min(Ami[rt*2],Ami[rt*2+1]);
	Apmi[rt]=min(Apmi[rt*2],Apmi[rt*2+1]);
	
}

void upd2(int rt)
{	
	Bmx[rt]=max(Bmx[rt*2],Bmx[rt*2+1]);
	Bmi[rt]=min(Bmi[rt*2],Bmi[rt*2+1]);
}


void build1(int l,int r,int rt)
{
	if(l==r)
	{
		Amx[rt]=Ami[rt]=a[l];
		if(a[l]>=0)Apmi[rt]=a[l],Anmx[rt]=-1e9;
		else Anmx[rt]=a[l],Apmi[rt]=1e9;
		return ;
	}
	int mid=l+r>>1;
	build1(l,mid,rt*2);
	build1(mid+1,r,rt*2+1);
	upd1(rt);
}
void build2(int l,int r,int rt)
{
	if(l==r)
	{
		Bmi[rt]=Bmx[rt]=b[l];
		return ;
	}
	int mid=l+r>>1;
	build2(l,mid,rt*2);
	build2(mid+1,r,rt*2+1);
	upd2(rt);
}

int AQmi(int x,int y,int l,int r,int rt)
{
	int ans=1e9;
	if(x<=l&&r<=y)
	{
		return Ami[rt]; 
	}
	int mid=l+r>>1;
	if(x<=mid) ans=min(ans,AQmi(x,y,l,mid,rt*2));
	if(y>mid) ans=min(ans,AQmi(x,y,mid+1,r,rt*2+1));
	return ans;
}

int AQmx(int x,int y,int l,int r,int rt)
{
	int ans=-1e9;
	if(x<=l&&r<=y)
	{
		return Amx[rt]; 
	}
	int mid=l+r>>1;
	if(x<=mid) ans=max(ans,AQmx(x,y,l,mid,rt*2));
	if(y>mid) ans=max(ans,AQmx(x,y,mid+1,r,rt*2+1));
	return ans;
}
int AQpmi(int x,int y,int l,int r,int rt)
{
	int ans=1e9;
	if(x<=l&&r<=y)
	{
		return Apmi[rt]; 
	}
	int mid=l+r>>1;
	if(x<=mid) ans=min(ans,AQpmi(x,y,l,mid,rt*2));
	if(y>mid) ans=min(ans,AQpmi(x,y,mid+1,r,rt*2+1));
	return ans;
}

int AQnmx(int x,int y,int l,int r,int rt)
{
	int ans=-1e9;
	if(x<=l&&r<=y)
	{
		return Anmx[rt]; 
	}
	int mid=l+r>>1;
	if(x<=mid) ans=max(ans,AQnmx(x,y,l,mid,rt*2));
	if(y>mid) ans=max(ans,AQnmx(x,y,mid+1,r,rt*2+1));
	return ans;
}
int BQmi(int x,int y,int l,int r,int rt)
{
	int ans=1e9;
	if(x<=l&&r<=y)
	{
		return Bmi[rt]; 
	}
	int mid=l+r>>1;
	if(x<=mid) ans=min(ans,BQmi(x,y,l,mid,rt*2));
	if(y>mid) ans=min(ans,BQmi(x,y,mid+1,r,rt*2+1));
	return ans;
}

int BQmx(int x,int y,int l,int r,int rt)
{
	int ans=-1e9;
	if(x<=l&&r<=y)
	{
		return Bmx[rt]; 
	}
	int mid=l+r>>1;
	if(x<=mid) ans=max(ans,BQmx(x,y,l,mid,rt*2));
	if(y>mid) ans=max(ans,BQmx(x,y,mid+1,r,rt*2+1));
	return ans;
}
int got()
{
	if(u2>=0)
	{
		if(v1>=0)return v1*u2;
		else return v3*u1;
	}
	else if(u1<=0)
	{
		if(v2<=0)return v2*u1;
		else return v4*u2;
	}
	else
	{
		if(v2>=0)return v4*u2;
		else if(v1<=0)return v3*u1;
		else return max(v4*u2,v3*u1);
	}
}
signed main()
{
	cin>>n>>m>>q;
	bool p=1;
	for(int i=1;i<=n;i++)	cin>>a[i];
	for(int i=1;i<=m;i++)	cin>>b[i];
	
	build1(1,n,1);
	build2(1,m,1);
//	for(int i=1;i<=4;i++)cout<<Bmx[i]<<" ho ";
//	cout<<endl;
	for(int i=1;i<=q;i++)
	{
		cin>>l1>>l2>>r1>>r2;
		u1=BQmx(r1,r2,1,m,1);u2=BQmi(r1,r2,1,m,1);
		v1=AQmx(l1,l2,1,n,1);v2=AQmi(l1,l2,1,n,1);
		v3=AQnmx(l1,l2,1,n,1);v4=AQpmi(l1,l2,1,n,1);	
//		cout<<"homo "<<u1<<" "<<u2<<" "<<v1<<" "<<v2<<" "<<v3<<" "<<v4<<endl;	
		cout<<got()<<endl;
	}
	return 0;
}
2022/11/23 21:16
加载中...