0分求调
查看原帖
0分求调
570505
dcy0709楼主2023/10/4 19:36
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define int long long
int val[1000005],lazy[1000005],L[1000005],R[1000005],a[1000005],b[100005],d[1000005],LL[100005],RR[100005];
int n,m;
int u1(int x){
	val[x]=max(val[x*2],val[x*2+1]);	
}
void f1(int x,int l,int r){
	L[x]=l;
	R[x]=r;
	if(l==r){
		val[x]=a[l];
		return; 
	}
	int mid=l+(r-l)/2;
	f1(x*2,l,mid);
	f1(x*2+1,mid+1,r);
	u1(x);
}//正数最小值 
int q1(int x,int l,int r){
	if(l<=L[x]&&r>=R[x]){
		if(val[x]>=0)return val[x];
		else return 2e9;
	}
	int mid=(L[x]+R[x])/2;
	int res=2e9;
	if(l<=mid){
		res=min(res,q1(x*2,l,r));
	}
	if(mid<r){
		res=min(res,q1(x*2+1,l,r));
	}
	return res;
}

//1
int u2(int x){
	d[x]=max(d[x*2],d[x*2+1]);	
}
void f2(int x,int l,int r){
	LL[x]=l;
	RR[x]=r;
	if(l==r){
		d[x]=b[l];
		return; 
	}
	int mid=l+(r-l)/2;
	f2(x*2,l,mid);
	f2(x*2+1,mid+1,r);
	u2(x);
}
int q2(int x,int l,int r){
	if(l<=LL[x]&&r>=RR[x]){
		if(d[x]>=0)
		return d[x];
		else return 2e9;
	}
	int mid=(LL[x]+RR[x])/2;
	int res=2e9;
	if(l<=mid){
		res=min(res,q2(x*2,l,r));
	}
	if(mid<r){
		res=min(res,q2(x*2+1,l,r));
	}
	return res;
}
//2

int q3(int x,int l,int r){//负数最大值 
	if(l<=L[x]&&r>=R[x]){
		if(val[x]<0)return val[x];
		else{
			return -2e9;
		}
	}
	int mid=(L[x]+R[x])/2;
	int res=0;
	if(l<=mid){
		if(res==0&&q3(x*2,l,r)!=-2e9){
			res=q3(x*2,l,r);
		}
		else 
		res=max(res,q3(x*2,l,r));
	}
	if(mid<r){
	if(res==0&&q3(x*2+1,l,r)!=-2e9)res=q3(x*2+1,l,r);
	else res=max(res,q3(x*2+1,l,r));
		
	}
	return res;
}
//3


int q4(int x,int l,int r){
	if(l<=LL[x]&&r>=RR[x]){
		if(d[x]<=0) 
		return d[x];
		else return -2e9; 
	}
	int mid=(LL[x]+RR[x])/2;
	int res=-2e9;
	if(l<=mid){
		res=max(res,q4(x*2,l,r));
	}
	if(mid<r){
		res=max(res,q4(x*2+1,l,r));
	}
	return res;
}
//4


int q5(int x,int l,int r){
	if(l<=L[x]&&r>=R[x]){
		return val[x];
	}
	int mid=(L[x]+R[x])/2;
	int res=2e9;
	if(l<=mid){
		res=min(res,q5(x*2,l,r));
	}
	if(mid<r){
		res=min(res,q5(x*2+1,l,r));
	}
	return res;
}
//5


int q6(int x,int l,int r){//最小正数 
	if(l<=LL[x]&&r>=RR[x]){
		return d[x];
	}
	int mid=(LL[x]+RR[x])/2;
	int res=2e9;
	if(l<=mid){
		res=min(res,q6(x*2,l,r));
	}
	if(mid<r){
		res=min(res,q6(x*2+1,l,r));
	}
	return res;
}
//6


int q7(int x,int l,int r){//最大值 
	if(l<=L[x]&&r>=R[x]){
		return val[x];
	}
	int mid=(L[x]+R[x])/2;
	int res=-2e9;
	if(l<=mid){
		res=max(res,q7(x*2,l,r));
	}
	if(mid<r){
		res=max(res,q7(x*2+1,l,r));
	}
	return res;
}
//7


int q8(int x,int l,int r){
	if(l<=LL[x]&&r>=RR[x]){
		return d[x];
	}
	int mid=(LL[x]+RR[x])/2;
	int res=-2e9;
	if(l<=mid){
		res=max(res,q8(x*2,l,r));
	}
	if(mid<r){
		res=max(res,q8(x*2+1,l,r));
	}
	return res;
}
//8
signed main(){
	int q;
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];

	}
	f1(1,1,n);
	for(int i=1;i<=m;i++){
		cin>>b[i];
	}
	f2(1,1,m);
	for(int i=1;i<=q;i++){
		int l1,l2,r1,r2;
		cin>>l1>>l2>>r1>>r2;
		int aa=min(q1(1,l1,l2)*q6(1,r1,r2),q1(1,l1,l2)*q8(1,r1,r2));
		//cout<<1<<endl;
		//cout<<q3(1,l1,l2)<<" "<<q6(1,r1,r2)<<" "<<q3(1,l1,l2)<<" "<<q8(1,r1,r2)<<endl;
		int aaa=min(q3(1,l1,l2)*q6(1,r1,r2),q3(1,l1,l2)*q8(1,r1,r2));
		//cout<<2<<endl;
		int aaaa=min(q5(1,l1,l2)*q6(1,r1,r2),q5(1,l1,l2)*q8(1,r1,r2));
		int aaaaa=min(q7(1,l1,l2)*q6(1,r1,r2),q7(1,l1,l2)*q8(1,r1,r2));
		//cout<<aa<<" "<<aaa<<" "<<aaaa<<" "<<aaaaa<<endl;
		cout<<max(aa,max(aaa,max(aaaa,aaaaa)))<<endl;
	}
	
    return 0;
}
2023/10/4 19:36
加载中...