求救,st表,全wa,在线等急,玄关
查看原帖
求救,st表,全wa,在线等急,玄关
677177
封禁用户楼主2024/3/21 12:35
#include <bits/stdc++.h>
using namespace std;
long long y,ad,bd,ax,bx,n,m,q,a[100010],b[100010],af[100010][50],ag[100010][50],l1,l2,r1,r2,c,w,e,v,mi,ma,gax[100010][50],gad[100010][50],gbd[100010][50],gbx[100010][50];
long long xa(long long l,long long r){
	return max(gax[l][c],gax[r-(1<<c)+1][c]);
}
long long xb(long long l,long long r){
	return max(gbx[l][v],gbx[r-(1<<v)+1][v]);
}
long long da(long long l,long long r){
	return max(gad[l][c],gad[r-(1<<c)+1][c]);
}
long long db(long long l,long long r){
	return max(gbd[l][v],gbd[r-(1<<v)+1][v]);
}
long long za(long long a,long long b){
	if(a>b){
		return a;
	}
	return b;
}
int main(){
	cin>>n>>m>>q;
	for(long long i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		gad[i][0]=a[i];
		gax[i][0]=a[i];
		if(a[i]>=0){
			af[i][0]=a[i];
			ag[i][0]=0x8080808080808080;
		}
		else{
			ag[i][0]=a[i];
			af[i][0]=0x7f7f7f7f7f7f7f7f;
		}
	}
	for(long long j=1;(1<<j)<=n;j++){
		for(long long i=1;i<=n-(1<<j)+1;i++){
			gad[i][j]=max(gad[i][j-1],gad[i+(1<<(j-1))][j-1]);
			gax[i][j]=min(gax[i][j-1],gax[i+(1<<(j-1))][j-1]);
			af[i][j]=min(af[i][j-1],af[i+(1<<(j-1))][j-1]);
			ag[i][j]=max(ag[i][j-1],ag[i+(1<<(j-1))][j-1]);
		}
	}
	for(long long i=1;i<=m;i++){
		scanf("%lld",&b[i]);
		gbd[i][0]=b[i];
		gbx[i][0]=b[i];
	}
	for(long long j=1;(1<<j)<=m;j++){
		for(long long i=1;i<=m-(1<<j)+1;i++){
			gbd[i][j]=max(gbd[i][j-1],gbd[i+(1<<(j-1))][j-1]);
			gbx[i][j]=min(gbx[i][j-1],gbx[i+(1<<(j-1))][j-1]);
		}
	}
	for(long long i=1;i<=q;i++){
		scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
		c=log2(r1-l1+1);
		v=log2(r2-l2+1);
		ax=xa(l1,r1);
		bx=xb(l2,r2);
		ad=da(l1,r1);
		bd=db(l2,r2);
		if(ax>=0&&bx>=0){
			printf("%lld\n",ad*bx);
		}
		else if(ax>=0&&bd<0){
			printf("%lld\n",ax*bx);
		}
		else if(ax>=0){
			printf("%lld\n",ax*bx);
		}
		else if(ad<0&&bx>=0){
			printf("%lld\n",ad*bd);
		}
		else if(ad<0&&bd<0){
			printf("%lld\n",ax*bd);
		}
		else if(ad<0){
			printf("%lld\n",ad*bd);
		}
		else if(bx>=0){
			printf("%lld\n",ad*bx);
		}
		else if(bd<0){
			printf("%lld\n",ax*bd);
		}
		else{
			w=min(af[l1][c],af[r1-(1<<c)+1][c])*bx;
			e=max(ag[l1][c],ag[r1-(1<<c)+1][c])*bd;
			y=za(w,e);
			printf("%lld\n",y); 
		}
	}
	return 0;
}

全wa,在线等急

2024/3/21 12:35
加载中...