逆天红名蒟蒻调st模板级绿题爆炸0pts
查看原帖
逆天红名蒟蒻调st模板级绿题爆炸0pts
822439
lhz2022楼主2024/10/18 21:15
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define debug() puts("I WILL AK")
#define N 100007
#define INF 2000000000
int lg[N],a[N],b[N],amax[N][17],amin[N][17],bmax[N][17],bmin[N][17],amax1[N][17],amin1[N][17];
int n,m,q;
void init(){
	lg[1]=0;
	for(int i=2;i<=max(n,m);++i){
		lg[i]=lg[i>>1]+1;
	}
	for(int i=1;i<=n;++i){
		amax[i][0]=amin[i][0]=a[i];
		amax1[i][0]=(a[i]<0?a[i]:-INF);
		amin1[i][0]=(a[i]>=0?a[i]:INF);
	}
	for(int i=1;i<=m;++i){
		bmax[i][0]=bmin[i][0]=b[i];
	}
	for(int j=1;j<=lg[n];j++){
		for(int i=1;i+(1<<j)-1<=n;++i){
			amax[i][j]=max(amax[i][j-1],amax[i+(1<<(j-1))][j-1]);
			amax1[i][j]=max(amax1[i][j-1],amax1[i+(1<<(j-1))][j-1]);
			amin[i][j]=min(amin[i][j-1],amin[i+(1<<(j-1))][j-1]);
			amin1[i][j]=min(amin1[i][j-1],amin1[i+(1<<(j-1))][j-1]);
		}
	}
	for(int j=1;j<=lg[m];j++){
		for(int i=1;i+(1<<j)-1<=m;++i){
			bmax[i][j]=max(bmax[i][j-1],bmax[i+(1<<(j-1))][j-1]);
			bmin[i][j]=min(bmin[i][j-1],bmin[i+(1<<(j-1))][j-1]);
		}
	}
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".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];
	}
	init();
	while(q--){
		int l1,r1,l2,r2;
		cin>>l1>>r1>>l2>>r2;
		int k1=lg[r1-l1+1],k2=lg[r2-l2+1];
		int amx=max(amax[l1][k1],amax[r1-(1<<k1)+1][k1]);
		int amx1=max(amax1[l1][k1],amax1[r1-(1<<k1)+1][k1]);
		int amn=min(amin[l1][k1],amin[r1-(1<<k1)+1][k1]);
		int amn1=min(amin1[l1][k1],amin1[r1-(1<<k1)+1][k1]);
		int bmx=max(bmax[l2][k2],bmax[r2-(1<<k2)+1][k2]);
		int bmn=min(bmin[l2][k2],bmin[r2-(1<<k2)+1][k2]);
		int ans=-INF;
		max({ans,amx*(amx>=0?bmn:bmx),amn*(amn>=0?bmn:bmx)});
		if(amx1!=-INF) ans=max({ans,amx1*(amx1>=0?bmn:bmx)});
		if(amn1!=INF) ans=max({ans,amn1*(amn1>=0?bmn:bmx)});
		cout<<ans<<'\n';
		
	}
	return 0;
}
2024/10/18 21:15
加载中...