50pts求调,玄关一枚
查看原帖
50pts求调,玄关一枚
1286553
doooge楼主2025/6/20 17:15
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=1e18+1;
int lg[100010],s[100010],s2[100010],st[100010][20],st2[100010][20],st3[100010][20],st4[100010][20],st5[100010][20],st6[100010][20];
int query(int l,int r,int op){
	int len=lg[r-l+1];
	if(op==1){
		return max(st[l][len],st[r-(1<<len)+1][len]);
	}else if(op==2){
		return min(st2[l][len],st2[r-(1<<len)+1][len]);
	}else if(op==3){
		return max(st3[l][len],st3[r-(1<<len)+1][len]);
	}else if(op==4){
		return min(st4[l][len],st4[r-(1<<len)+1][len]);
	}else if(op==5){
		return (min(st5[l][len],st5[r-(1<<len)+1][len])>INF?INF:min(st5[l][len],st5[r-(1<<len)+1][len]));
	}
	return (max(st6[l][len],st6[r-(1<<len)+1][len])<-INF?INF:max(st6[l][len],st6[r-(1<<len)+1][len]));
}
bool find0(int l,int r,int op){
	if(op==1){
		return s[r]-s[l-1]>0;
	}
	return  s2[r]-s2[l-1]>0;
}
signed main(){
    int n,m,q;
    cin>>n>>m>>q;
	for(int i=2;i<=max(n,m);i++){
		lg[i]=lg[i>>1]+1;
	}
	memset(st5,0x3f,sizeof(st5));
	memset(st6,-0x3f,sizeof(st6));
    for(int i=1;i<=n;i++){
        cin>>st[i][0];
		s[i]=s[i-1];
		if(st[i][0]==0)s[i]++;
        st2[i][0]=st[i][0];
		if(st[i][0]>=0)st5[i][0]=st[i][0];
		if(st[i][0]<=0)st6[i][0]=st[i][0];
    }
    for(int i=1;i<=m;i++){
        cin>>st3[i][0];
		s2[i]=s2[i-1];
		if(st3[i][0]==0)s2[i]++;
		st4[i][0]=st3[i][0];
    }
	for(int j=1;j<=lg[n];j++){
		for(int i=1;i<=n-(1<<j)+1;i++){
			st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
			st2[i][j]=min(st2[i][j-1],st2[i+(1<<(j-1))][j-1]);
			st5[i][j]=min(st5[i][j-1],st5[i+(1<<(j-1))][j-1]);
			st6[i][j]=max(st6[i][j-1],st6[i+(1<<(j-1))][j-1]);
		}
	}
	for(int j=1;j<=lg[m];j++){
		for(int i=1;i<=m-(1<<j)+1;i++){
			st3[i][j]=max(st3[i][j-1],st3[i+(1<<(j-1))][j-1]);
			st4[i][j]=min(st4[i][j-1],st4[i+(1<<(j-1))][j-1]);
		}
	}
    while(q--){
        int l,r,l2,r2,ans=-1;
        cin>>l>>r>>l2>>r2;
		if(query(l2,r2,4)>=0){
			ans=query(l,r,1)*query(l2,r2,4);
		}else if(query(l2,r2,3)<=0){
			if(query(l,r,2)>0)ans=query(l,r,2)*query(l2,r2,4);
			else ans=query(l,r,2)*query(l2,r2,3);
		}else{
			if(query(l,r,5)==INF||query(l2,r2,4)==INF)ans=query(l,r,6)*query(l2,r2,3);
			else if(query(l,r,6)==INF||query(l2,r2,3)==INF)ans=query(l,r,5)*query(l2,r2,4);
			else ans=max(query(l,r,5)*query(l2,r2,4),query(l,r,6)*query(l2,r2,3));
		}
		if(find0(l,r,1)&&ans<0)ans=0;
		if(find0(l2,r2,2)&&ans>0)ans=0;
		cout<<ans<<endl;
    }
	return 0;
}

link,心态炸了

2025/6/20 17:15
加载中...