40pts求助
查看原帖
40pts求助
684245
zhangyaiwei楼主2023/7/7 19:25

和前面几位dalao不同,我的是这样的 注:极值已设我MAXLONGLONG与MINLONGLONG

DIE码:

#include<bits/stdc++.h>
using namespace std;
long long n,m,q,a[111111],b[111111],cntza[111111],cntzb[111111],cntfa[111111],cntfb[111111],sa[111111],sb[111111],logs[111111],tamin[111111][21],tamax[111111][21],tbmin[111111][21],tbmax[111111][21],tafmax[111111][21],tazmin[111111][21],tbfmin[111111][21],tbzmax[111111][21],l1,r1,l2,r2;
long long qmax(long long x,long long y,long long p[111111][21]){
	return max(p[x][logs[y-x+1]],p[y+1-(long long)(pow(2,logs[y-x+1]))][logs[y-x+1]]);
}
long long qmin(long long x,long long y,long long p[111111][21]){
	return min(p[x][logs[y-x+1]],p[y+1-(long long)(pow(2,logs[y-x+1]))][logs[y-x+1]]);
}
int main(){
	//freopen("0.txt","w",stdout);
	logs[1]=0;
	for(long long i=2;i<=100011;i++){
		logs[i]=logs[i/2]+1;
	}
	cin>>n>>m>>q;
	for(long long i=1;i<=n;i++){
		cin>>a[i];
		tamax[i][0]=tamin[i][0]=a[i];
		cntza[i]=cntza[i-1];
		if(a[i]>0){
			cntza[i]=cntza[i-1]+1;
			tazmin[i][0]=a[i];
		}
		else{
			tazmin[i][0]=9223372036854775808;
		}
		cntfa[i]=cntfa[i-1];
		if(a[i]<0){
			cntfa[i]=cntfa[i-1]+1;
			tafmax[i][0]=a[i];
		}
		else{
			tafmax[i][0]=-9223372036854775808;
		}
		sa[i]=sa[i-1]+(a[i]==0);
		//cout<<cntza[i]<<"\n";
	}
	for(long long i=1;i<=m;i++){
		cin>>b[i];
		tbmax[i][0]=tbmin[i][0]=b[i];
		cntzb[i]=cntzb[i-1];
		if(b[i]>0){
			cntzb[i]=cntzb[i-1]+1;
			tbzmax[i][0]=b[i];
		}
		else{
			tbzmax[i][0]=-9223372036854775808;
		}
		cntfb[i]=cntfb[i-1];
		if(b[i]<0){
			cntfb[i]=cntfb[i-1]+1;
			tbfmin[i][0]=b[i];
		}
		else{
			tbfmin[i][0]=9223372036854775808;
		}
		sb[i]=sb[i-1]+(b[i]==0);
	}
	for(long long j=1;pow(2,j)<=n;j++){
		for(long long i=1;i<=n;i++){
			tamax[i][j]=max(tamax[i][j-1],tamax[i+(long long)(pow(2,j-1))][j-1]);
			tamin[i][j]=min(tamin[i][j-1],tamin[i+(long long)(pow(2,j-1))][j-1]);
			tafmax[i][j]=max(tafmax[i][j-1],tafmax[i+(long long)(pow(2,j-1))][j-1]);
			tazmin[i][j]=min(tazmin[i][j-1],tazmin[i+(long long)(pow(2,j-1))][j-1]);
		}
	}
	for(long long j=1;pow(2,j)<=m;j++){
		for(long long i=1;i<=m;i++){
			tbmax[i][j]=max(tbmax[i][j-1],tbmax[i+(long long)(pow(2,j-1))][j-1]);
			tbmin[i][j]=min(tbmin[i][j-1],tbmin[i+(long long)(pow(2,j-1))][j-1]);
			tbzmax[i][j]=max(tbzmax[i][j-1],tbzmax[i+(long long)(pow(2,j-1))][j-1]);
			tbfmin[i][j]=min(tbfmin[i][j-1],tbfmin[i+(long long)(pow(2,j-1))][j-1]);
		}
	}
	while(q--){
		cin>>l1>>r1>>l2>>r2;
		long long ans;
		if(cntfa[r1]-cntfa[l1-1]==0){
			//cout<<"张晏玮真帅\n";
			if(cntfb[r2]-cntfb[l2-1]==0){
				ans=qmax(l1,r1,tamax)*qmin(l2,r2,tbmin);
			}
			else{
				ans=qmin(l1,r1,tamin)*qmax(l2,r2,tbmin);
			}
		}
		else if(cntza[r1]-cntza[l1-1]==0){
			//cout<<"张晏玮太帅了\n";
			if(cntzb[r2]-cntzb[l2-1]==0){
				ans=qmin(l1,r1,tamin)*qmax(l2,r2,tbmax);
			}
			else{
				ans=qmax(l1,r1,tamax)*qmax(l2,r2,tbmax);
			}
		}
		else{
			//cout<<"张晏玮实在是太帅了\n";
			if(cntzb[r2]-cntzb[l2-1]==0){
				ans=qmin(l1,r1,tamin)*qmax(l2,r2,tbmax);
			}
			else if(cntfb[r2]-cntfb[l2-1]==0){
				ans=qmax(l1,r1,tamax)*qmin(l2,r2,tbmin);
			}
			else{
				ans=max(qmin(l1,r1,tazmin)*qmin(l2,r2,tbfmin),qmax(l1,r1,tafmax)*qmax(l2,r2,tbzmax));
				//cout<<qmax(l1,r1,tafmax)<<" "<<qmax(l2,r2,tbzmax)<<endl;
			}
		}
		if(sa[r1]-sa[l1-1]>0){
			cout<<max(ans,0ll)<<endl;
		}
		else if(sb[r2]-sb[l2-1]>0){
			cout<<min(ans,0ll)<<endl;
		}
		else{
			cout<<ans<<endl;
		}
		// if((s[r2]-s[l2-1])>0){
		// 	cout<<0<<endl;
		// 	continue;
		// }
		//printf("%d  %d  %d  %d\n",sma(l1,r1),smb(l1,r1),sia(l1,r1),sib(l1,r1));
		//cout<<tib[l1][r1];
	}
}

2023/7/7 19:25
加载中...