rt,讨论区hack数据全过
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
class Segment_tree
{
private:
int node_max[N*4],node_min[N*4];
int Node_max[N*4],Node_min[N*4];
void push_up(int id)
{
node_max[id]=max(node_max[id*2],node_max[id*2+1]);
node_min[id]=min(node_min[id*2],node_min[id*2+1]);
Node_max[id]=max(Node_max[id*2],Node_max[id*2+1]);
Node_min[id]=min(Node_min[id*2],Node_min[id*2+1]);
}
public:
void build(int id,int l,int r,int a[N])
{
if(l==r)
{
node_max[id]=node_min[id]=a[l];
if(a[l]<0)Node_max[id]=a[l],Node_min[id]=1e18+5;
if(a[l]>0)Node_min[id]=a[l],Node_max[id]=-1e18-5;
if(a[l]==0)Node_min[id]=0,Node_max[id]=0;
}
else
{
int mid=(l+r)/2;
build(id*2,l,mid,a),build(id*2+1,mid+1,r,a);
push_up(id);
}
}
int query_max(int id,int l,int r,int x,int y)
{
if(x<=l&&r<=y)return node_max[id];
int mid=(l+r)/2,res=-1e18-5;
if(x<=mid)res=max(res,query_max(id*2,l,mid,x,y));
if(y>mid)res=max(res,query_max(id*2+1,mid+1,r,x,y));
return res;
}
int query_min(int id,int l,int r,int x,int y)
{
if(x<=l&&r<=y)return node_min[id];
int mid=(l+r)/2,res=1e18+5;
if(x<=mid)res=min(res,query_min(id*2,l,mid,x,y));
if(y>mid)res=min(res,query_min(id*2+1,mid+1,r,x,y));
return res;
}
int query_maxn(int id,int l,int r,int x,int y)
{
if(x<=l&&r<=y)return Node_max[id];
int mid=(l+r)/2,res=-1e18-5;
if(x<=mid)res=max(res,query_maxn(id*2,l,mid,x,y));
if(y>mid)res=max(res,query_maxn(id*2+1,mid+1,r,x,y));
return res;
}
int query_minn(int id,int l,int r,int x,int y)
{
if(x<=l&&r<=y)return Node_min[id];
int mid=(l+r)/2,res=1e18+5;
if(x<=mid)res=min(res,query_minn(id*2,l,mid,x,y));
if(y>mid)res=min(res,query_minn(id*2+1,mid+1,r,x,y));
return res;
}
}T1,T2;
int n,m,q,a[N],b[N],l1,r1,l2,r2;
signed main()
{
cin>>n>>m>>q;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)cin>>b[i];
T1.build(1,1,n,a),T2.build(1,1,m,b);
for(int i=1;i<=q;i++)
{
cin>>l1>>r1>>l2>>r2;
int t11=T1.query_max(1,1,n,l1,r1),t12=T1.query_min(1,1,n,l1,r1);
int t13=T1.query_maxn(1,1,n,l1,r1),t14=T1.query_minn(1,1,n,l1,r1);
int t21=T2.query_max(1,1,m,l2,r2),t22=T2.query_min(1,1,m,l2,r2);
if(t12>0&&t22>0)cout<<t11*t22<<'\n';
if(t12>0&&t21<0)cout<<t12*t22<<'\n';
if(t12>0&&t21>0&&t22<0)cout<<t12*t22<<'\n';
if(t11<0&&t22>0)cout<<t11*t21<<'\n';
if(t11<0&&t21<0)cout<<t12*t21<<'\n';
if(t11<0&&t21>0&&t22<0)cout<<t11*t21<<'\n';
if(t11>0&&t12<0&&t22>0)cout<<t11*t22<<'\n';
if(t11>0&&t12<0&&t21<0)cout<<t12*t21<<'\n';
if(t11>0&&t12<0&&t21>0&&t22<0)cout<<max(t13*t21,t14*t22)<<'\n';
if(t11==0&&t12==0&&t21==0&&t22==0)cout<<"0\n";
}
return 0;
}