40pts?
查看原帖
40pts?
553673
ygkl9698楼主2022/11/26 13:52
#include<iostream>
#include<cstring>
using namespace std;
int n,m,q;
long long a[100010],b[100010],Bmax[100010][18],Bmin[100010][18],Amax[100010][18],Amin[100010][18],Abig[100010][18],Asmall[100010][18];
int log[100010],l1,l2,r1,r2;
void qmax(int n,long long x[],long long Max[][18]){
	for(int i=1;i<=n;i++){
		for(int j=0;j<=18;j++){
			Max[i][j]=-0x3f3f3f3f3f3f3f3f;
		}
	}
	for(int i=1;i<=n;i++) Max[i][0]=x[i];
	for(int j=1;j<=18;j++)
        for(int i=1;i+(1<<j)-1<=n;i++)
            Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);
}
void qbig(int n,long long x[],long long Min[][18]){
	for(int i=1;i<=n;i++){
		for(int j=0;j<=18;j++){
			Min[i][0]=0x3f3f3f3f3f3f3f3f;
		}
	}
	for(int i=1;i<=n;i++) if(x[i]>0) Min[i][0]=x[i];
	for(int j=1;j<=18;j++)
        for(int i=1;i+(1<<j)-1<=n;i++){
        	Min[i][j]=min(Min[i][j-1],Min[i+(1<<(j-1))][j-1]);
		}
}
void qsmall(int n,long long x[],long long Max[][18]){
	for(int i=1;i<=n;i++){
		if(x[i]>0){
			Max[i][0]=-0x3f3f3f3f3f3f3f3f;
			continue;
		}
		Max[i][0]=x[i];
	}
	for(int j=1;j<=18;j++)
        for(int i=1;i+(1<<j)-1<=n;i++)
            Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);
}
void qmin(int n,long long x[],long long Min[][18]){
	for(int i=1;i<=n;i++){
		for(int j=0;j<=18;j++){
			Min[i][j]=0x3f3f3f3f3f3f3f3f;
		}
	}
	for(int i=1;i<=n;i++) Min[i][0]=x[i];
	for(int j=1;j<=18;j++)
        for(int i=1;i+(1<<j)-1<=n;i++){
        	Min[i][j]=min(Min[i][j-1],Min[i+(1<<(j-1))][j-1]);
        	if(Min[i][j]==0){
			}
		}
}
long long minor(int l,int r,long long Min[][18]){
	int h=log[r-l+1];
	return min(Min[l][h],Min[r-(1<<h)+1][h]);
}
long long maxor(int l,int r,long long Max[][18]){
	int h=log[r-l+1];
	return max(Max[l][h],Max[r-(1<<h)+1][h]);
}
int main(){
	//freopen("game.in","r",stdin);
	//freopen("game.out","w",stdout);
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++){
		cin>>b[i];
	}
	log[1]=0;
	for(int i=2;i<=100000;i++){
		log[i]=log[i/2]+1;
	}
	qmax(n,a,Amax);
	qmax(m,b,Bmax);
	qmin(n,a,Amin);
	qmin(m,b,Bmin);
	qbig(n,a,Abig);
	qsmall(n,a,Asmall);
	while(q--){
		cin>>l1>>r1>>l2>>r2;
		long long o=minor(l2,r2,Bmin),p=maxor(l2,r2,Bmax);
		if(o>=0){
			if(maxor(l1,r1,Amax)<0) cout<<p*maxor(l1,r1,Amax)<<endl;
			else cout<<o*maxor(l1,r1,Amax)<<endl;
		}else if(p<=0){
			if(minor(l1,r1,Amin)>=0) cout<<o*minor(l1,r1,Amin)<<endl;
			else cout<<p*minor(l1,r1,Amin)<<endl;
		}else{
			cout<<max(o*minor(l1,r1,Abig),p*maxor(l1,r1,Asmall))<<endl;
		}
	}
	//fclose(stdin);
	//fclose(stdout);
	return 0;
} 

官方40,民间65

2022/11/26 13:52
加载中...