样例全过,5分求助
查看原帖
样例全过,5分求助
304504
蓝__楼主2022/11/6 14:43
%:include<bits/stdc++.h>/*
%:define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf<:1<<21:>,*p1=buf,*p2=buf;*/
template<typename L> inline void Read(L &X)<%
	char c=getchar();L zhi=0,fu=1;
	while(not isdigit(c))<%if(c=='-')fu=-1;c=getchar();%>
	while(isdigit(c))<%zhi=(zhi<<1)+(zhi<<3)+c-'0';c=getchar();%>
	X=fu*zhi;
%>
template <typename L> inline void Write(L X)<%
  	if(X<0) putchar('-'),X=-X;
	if(X>9) Write(X/10);
	putchar(X%10^48);
%>
long long n,m,q,mxz[500001],mnf[500001],mxf[500001],mnz[500001],tpo[500001],a[500001];
long long bmxz[500001],bmnf[500001],bmxf[500001],bmnz[500001],btpo[500001],b[500001];
inline long long Max(long long X,long long Y){return X>Y?X:Y;}
inline long long Min(long long X,long long Y){return X<Y?X:Y;}
inline void buildn(long long k,long long l,long long r){
	if(l==r){
		mxz[k]=((a[l]>0)?a[l]:-460000000000000000);
		mnf[k]=((a[l]<0)?a[l]:460000000000000000);
		mnz[k]=((a[l]>0)?a[l]:460000000000000000);
		mxf[k]=((a[l]<0)?a[l]:-460000000000000000);
		if(a[l]==0) tpo[k]=1;
		return;
	}
	long long mid=(l+r)>>1;
	buildn(k<<1,l,mid);
	buildn((k<<1)|1,mid+1,r);
	mxz[k]=Max(mxz[k<<1],mxz[(k<<1)|1]);
	mnf[k]=Min(mnf[k<<1],mnf[(k<<1)|1]);
	mxf[k]=Max(mxf[k<<1],mxf[(k<<1)|1]);
	mnz[k]=Min(mnz[k<<1],mnz[(k<<1)|1]);
	tpo[k]=Max(tpo[k<<1],tpo[(k<<1)|1]);
}
inline long long cntmxz(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return mxz[k];
	long long mid=(l+r)>>1,ans=-460000000000000000;
	if(x<=mid) ans=Max(ans,cntmxz(k<<1,l,mid,x,y));
	if(mid<y) ans=Max(ans,cntmxz((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline long long cntmnf(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return mnf[k];
	long long mid=(l+r)>>1,ans=460000000000000000;
	if(x<=mid) ans=Min(ans,cntmnf(k<<1,l,mid,x,y));
	if(mid<y) ans=Min(ans,cntmnf((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline long long cntmxf(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return mxf[k];
	long long mid=(l+r)>>1,ans=-460000000000000000;
	if(x<=mid) ans=Max(ans,cntmxf(k<<1,l,mid,x,y));
	if(mid<y) ans=Max(ans,cntmxf((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline long long cntmnz(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return mnz[k];
	long long mid=(l+r)>>1,ans=460000000000000000;
	if(x<=mid) ans=Min(ans,cntmnz(k<<1,l,mid,x,y));
	if(mid<y) ans=Min(ans,cntmnz((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline long long cnttpo(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return tpo[k];
	long long mid=(l+r)>>1,ans=0;
	if(x<=mid) ans=Max(ans,cnttpo(k<<1,l,mid,x,y));
	if(mid<y) ans=Max(ans,cnttpo((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline void buildm(long long k,long long l,long long r){
	if(l==r){
		bmxz[k]=((b[l]>0)?b[l]:-460000000000000000);
		bmnf[k]=((b[l]<0)?b[l]:460000000000000000);
		bmnz[k]=((b[l]>0)?b[l]:460000000000000000);
		bmxf[k]=((b[l]<0)?b[l]:-460000000000000000);
		if(b[l]==0) btpo[k]=1;
		return;
	}
	long long mid=(l+r)>>1;
	buildm(k<<1,l,mid);
	buildm((k<<1)|1,mid+1,r);
	bmxz[k]=Max(bmxz[k<<1],bmxz[(k<<1)|1]);
	bmnf[k]=Min(bmnf[k<<1],bmnf[(k<<1)|1]);
	bmxf[k]=Max(bmxf[k<<1],bmxf[(k<<1)|1]);
	bmnz[k]=Min(bmnz[k<<1],bmnz[(k<<1)|1]);
	btpo[k]=Max(btpo[k<<1],btpo[(k<<1)|1]);
}
inline long long bcntmxz(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return bmxz[k];
	long long mid=(l+r)>>1,ans=-460000000000000000;
	if(x<=mid) ans=Max(ans,bcntmxz(k<<1,l,mid,x,y));
	if(mid<y) ans=Max(ans,bcntmxz((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline long long bcntmnf(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return bmnf[k];
	long long mid=(l+r)>>1,ans=460000000000000000;
	if(x<=mid) ans=Min(ans,bcntmnf(k<<1,l,mid,x,y));
	if(mid<y) ans=Min(ans,bcntmnf((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline long long bcntmxf(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return bmxf[k];
	long long mid=(l+r)>>1,ans=-460000000000000000;
	if(x<=mid) ans=Max(ans,bcntmxf(k<<1,l,mid,x,y));
	if(mid<y) ans=Max(ans,bcntmxf((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline long long bcntmnz(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return bmnz[k];
	long long mid=(l+r)>>1,ans=460000000000000000;
	if(x<=mid) ans=Min(ans,bcntmnz(k<<1,l,mid,x,y));
	if(mid<y) ans=Min(ans,bcntmnz((k<<1)|1,mid+1,r,x,y));
	return ans;
}
inline long long bcnttpo(long long k,long long l,long long r,long long x,long long y){
	if(l>=x&&r<=y) return btpo[k];
	long long mid=(l+r)>>1,ans=0;
	if(x<=mid) ans=Max(ans,bcnttpo(k<<1,l,mid,x,y));
	if(mid<y) ans=Max(ans,bcnttpo((k<<1)|1,mid+1,r,x,y));
	return ans;
}
int main()<%
//	freopen("game3.in","r",stdin);
//	freopen("game3.out","w",stdout);
	Read(n); Read(m); Read(q);
	for(register int i=1;i<=n;++i) Read(a[i]);
	for(register int i=1;i<=m;++i) Read(b[i]);
	buildn(1,1,n); buildm(1,1,m);
	for(register int i=1;i<=q;++i){
		long long nl,nr,ml,mr;
		Read(nl); Read(nr); Read(ml); Read(mr);
		long long aa[6],bb[6],answ[6],answer=-460000000000000000;
		aa[1]=cntmxz(1,1,n,nl,nr); bb[1]=bcntmxz(1,1,m,ml,mr); answ[1]=460000000000000000;
		aa[2]=cntmnf(1,1,n,nl,nr); bb[2]=bcntmnf(1,1,m,ml,mr); answ[2]=460000000000000000;
		aa[3]=cntmxf(1,1,n,nl,nr); bb[3]=bcntmxf(1,1,m,ml,mr); answ[3]=460000000000000000;
		aa[4]=cntmnz(1,1,n,nl,nr); bb[4]=bcntmnz(1,1,m,ml,mr); answ[4]=460000000000000000;
		aa[5]=cnttpo(1,1,n,nl,nr); bb[5]=bcnttpo(1,1,m,ml,mr); answ[5]=460000000000000000;
//		Write(aa[1]); putchar(' '); Write(aa[2]); putchar(' '); Write(aa[3]); putchar(' '); Write(aa[4]); putchar('\n');
//		Write(bb[1]); putchar(' '); Write(bb[2]); putchar(' '); Write(bb[3]); putchar(' '); Write(bb[4]); putchar('\n');
		for(register int ll=1;ll<=4;++ll){
			if(aa[ll]==460000000000000000||aa[ll]==-460000000000000000) continue;
			for(register int rr=1;rr<=4;++rr){
				if(bb[rr]==460000000000000000||bb[rr]==-460000000000000000) continue;
				answ[ll]=Min(answ[ll],aa[ll]*bb[rr]);
			}
			if(bb[5]==1) answ[ll]=Min(answ[ll],0);
			answer=Max(answer,answ[ll]);
		}
		if(aa[5]==1) answer=Max(answer,0);
		Write(answer); putchar('\n');
	}
	return 0;
%>
2022/11/6 14:43
加载中...