40分求助
查看原帖
40分求助
380406
allqpsi楼主2023/9/15 21:12
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,q,a,b,c,d,fax[100005][17],negb[100005][17],posb[100005][17],fbn[100005][17],neg[100005][17],pos[100005][17],fan[100005][17],fbx[100005][17];
signed main(){
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		cin>>fax[i][0];
		if(fax[i][0]>=0){
			pos[i][0]=fax[i][0];
			neg[i][0]=-1e9+7;
		}
		else{
			neg[i][0]=fax[i][0];
			pos[i][0]=1e9+7;
		}
		fan[i][0]=fax[i][0];
	}
	for(int i=1;i<=m;i++){
		cin>>fbx[i][0];
		if(fbx[i][0]>=0){
			posb[i][0]=fbx[i][0];
			negb[i][0]=-1e9+7;
		}
		else{
			negb[i][0]=fbx[i][0];
			posb[i][0]=1e9+7;
		}
		fbn[i][0]=fbx[i][0];
	}
	for(int i=1;i<=16;i++){
		for(int j=1;j<=n;j++){
			if(j+(1<<i)-1>n){
				continue;
			}
			fax[j][i]=max(fax[j][i-1],fax[j+(1<<(i-1))][i-1]);
			fan[j][i]=min(fan[j][i-1],fan[j+(1<<(i-1))][i-1]);
			neg[j][i]=max(neg[j][i-1],neg[j+(1<<(i-1))][i-1]);
			pos[j][i]=min(pos[j][i-1],pos[j+(1<<(i-1))][i-1]);
		}
	}
	for(int i=1;i<=16;i++){
		for(int j=1;j<=m;j++){
			if(j+(1<<i)-1>n){
				continue;
			}
			fbn[j][i]=min(fbn[j][i-1],fbn[j+(1<<(i-1))][i-1]);
			fbx[j][i]=max(fbx[j][i-1],fbx[j+(1<<(i-1))][i-1]);
			negb[j][i]=max(negb[j][i-1],negb[j+(1<<(i-1))][i-1]);
			posb[j][i]=min(posb[j][i-1],posb[j+(1<<(i-1))][i-1]);
		}
	}
	for(int i=1;i<=q;i++){
		cin>>a>>b>>c>>d;
		int la=(int)log2(b-a+1),lb=(int)log2(d-c+1);
		int ta=b-(1<<la)+1,tb=d-(1<<lb)+1;
		int an=min(fan[a][la],fan[ta][la]),ax=max(fax[a][la],fax[ta][la]);
		int na=max(neg[a][la],neg[ta][la]),pa=min(pos[a][la],pos[ta][la]);
		int bn=min(fbn[c][lb],fbn[tb][lb]),bx=max(fbx[c][lb],fbx[tb][lb]);
		int nb=max(negb[c][lb],negb[tb][lb]),pb=min(posb[c][lb],posb[tb][lb]);
		if(an<0&&ax>=0&&bn<0&&bx>=0){
			if(pa==0){
				cout<<0<<endl;
				continue;
			}
			cout<<max(pa*bn,nb*bx)<<endl;
		}
		else if(an>=0&&bn<0&&bx>=0){
			if(pa==0){
				cout<<0<<endl;
				continue;
			}
			cout<<an*bn<<endl;
		}
		else if(ax<0&&bn<0&&bx>=0){
			if(pa==0){
				cout<<0<<endl;
				continue;
			}
			cout<<ax*bx<<endl;
		}
		else if(bn>=0&&an<0&&ax>=0){
			if(pb==0){
				cout<<0<<endl;
				continue;
			}
			cout<<ax*bn<<endl;
		}
		else if(bx<0&&an<0&&ax>=0){
			if(pb==0){
				cout<<0<<endl;
				continue;
			}
			cout<<an*bx<<endl;
		}
		else if(ax<0&&bx<0){
			cout<<an*bx<<endl;
		}
		else if(an>=0&&bn>=0){
			cout<<ax*bn<<endl;
		}
	}
}

help me!!!

plzplzplz

2023/9/15 21:12
加载中...