rt 就是线上测试本地跑第三个样例第二行寄了,
但是ide上没事,交上去还A了。。。
但是计蒜客上交上去还保龄了。。。。
萌新求助,感激不尽
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
long long n,m,a[100005],b[100005];
long long ta_max[400005],tb_min[400005];
long long ta_min[400005],tb_max[400005];
long long ta_fu[400005],tb_fu[400005];
long long ta_abs[400005],tb_abs[400005];
long long ta_z[400005],tb_z[400005];
long long Q,l1,l2,r1,r2;
inline long long read(){
long long s=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<1)+(s<<3)+(ch^48);
ch=getchar();
}
return s*f;
}
void abuild(long long id,long long l,long long r){
if(l==r){
ta_max[id]=a[l];
ta_min[id]=a[l];
if(a[l]<0) ta_fu[id]=a[l];
else ta_fu[id]=-100000000005;
if(a[l]>0) ta_abs[id]=a[l];
else ta_abs[id]=100000000005;
if(a[l]==0) ta_z[id]=1;
return ;
}
long long mid=(l+r)/2;
abuild(id*2,l,mid);
abuild(id*2+1,mid+1,r);
ta_max[id]=max(ta_max[id*2],ta_max[id*2+1]);
ta_min[id]=min(ta_min[id*2],ta_min[id*2+1]);
ta_abs[id]=min(ta_abs[id*2],ta_abs[id*2+1]);
ta_fu[id]=max(ta_fu[id*2],ta_fu[id*2+1]);
ta_z[id]=ta_z[id*2]|ta_z[id*2+1];
}
void bbuild(long long id,long long l,long long r){
if(l==r){
tb_max[id]=b[l];
tb_min[id]=b[l];
if(b[l]==0) tb_z[id]=1;
if(b[l]<0) tb_fu[id]=b[l];
else tb_fu[id]=-100000000005;
if(b[l]>0) tb_abs[id]=b[l];
else tb_abs[id]=100000000005;
return ;
}
long long mid=(l+r)/2;
bbuild(id*2,l,mid);
bbuild(id*2+1,mid+1,r);
tb_min[id]=min(tb_min[id*2],tb_min[id*2+1]);
tb_max[id]=max(tb_max[id*2],tb_max[id*2+1]);
tb_z[id]=tb_z[id*2]|tb_z[id*2+1];
tb_abs[id]=min(tb_abs[id*2],tb_abs[id*2+1]);
tb_fu[id]=max(tb_fu[id*2],tb_fu[id*2+1]);
}
long long querya_max(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return ta_max[id];
long long mid=(l+r)/2,ans=-100000000005;
if(mid>=al) ans=max(ans,querya_max(id*2,l,mid,al,ar));
if(mid+1<=ar) ans=max(ans,querya_max(id*2+1,mid+1,r,al,ar));
return ans;
}
long long querya_min(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return ta_min[id];
long long mid=(l+r)/2,ans=100000000005;
if(mid>=al) ans=min(ans,querya_min(id*2,l,mid,al,ar));
if(mid+1<=ar) ans=min(ans,querya_min(id*2+1,mid+1,r,al,ar));
return ans;
}
long long querya_z(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return ta_z[id];
long long mid=(l+r)/2,ans=0;
if(mid>=al) ans=ans|querya_z(id*2,l,mid,al,ar);
if(mid+1<=ar) ans=ans|querya_z(id*2+1,mid+1,r,al,ar);
return ans;
}
long long querya_abs(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return ta_abs[id];
long long mid=(l+r)/2,ans=100000000005;
if(mid>=al) ans=min(ans,querya_abs(id*2,l,mid,al,ar));
if(mid+1<=ar) ans=min(ans,querya_abs(id*2+1,mid+1,r,al,ar));
return ans;
}
long long querya_fu(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return ta_fu[id];
long long mid=(l+r)/2,ans=-100000000005;
if(mid>=al) ans=max(ans,querya_fu(id*2,l,mid,al,ar));
if(mid+1<=ar) ans=max(ans,querya_fu(id*2+1,mid+1,r,al,ar));
return ans;
}
long long queryb_min(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return tb_min[id];
long long mid=(l+r)/2,ans=100000000005;
if(mid>=al) ans=min(ans,queryb_min(id*2,l,mid,al,ar));
if(mid+1<=ar) ans=min(ans,queryb_min(id*2+1,mid+1,r,al,ar));
return ans;
}
long long queryb_max(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return tb_max[id];
long long mid=(l+r)/2,ans=-100000000005;
if(mid>=al) ans=max(ans,queryb_max(id*2,l,mid,al,ar));
if(mid+1<=ar) ans=max(ans,queryb_max(id*2+1,mid+1,r,al,ar));
return ans;
}
long long queryb_z(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return tb_z[id];
long long mid=(l+r)/2,ans=0;
if(mid>=al) ans=ans|queryb_z(id*2,l,mid,al,ar);
if(mid+1<=ar) ans=ans|queryb_z(id*2+1,mid+1,r,al,ar);
return ans;
}
long long queryb_abs(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return tb_abs[id];
long long mid=(l+r)/2,ans=100000000005;
if(mid>=al) ans=min(ans,queryb_abs(id*2,l,mid,al,ar));
if(mid+1<=ar) ans=min(ans,queryb_abs(id*2+1,mid+1,r,al,ar));
return ans;
}
long long queryb_fu(long long id,long long l,long long r,long long al,long long ar){
if(al<=l&&r<=ar) return tb_fu[id];
long long mid=(l+r)/2,ans=-100000000005;
if(mid>=al) ans=max(ans,queryb_fu(id*2,l,mid,al,ar));
if(mid+1<=ar) ans=max(ans,queryb_fu(id*2+1,mid+1,r,al,ar));
return ans;
}
int main(){
// game3!!!!!!!!!!!!!!!!!!!!!
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
n=read(),m=read(),Q=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=1;i<=m;i++) b[i]=read();
abuild(1,1,n);
bbuild(1,1,m);
while(Q--){
l1=read(),r1=read(),l2=read(),r2=read();
long long x=querya_min(1,1,n,l1,r1),xx=querya_max(1,1,n,l1,r1);
long long y=queryb_min(1,1,m,l2,r2),yy=queryb_max(1,1,m,l2,r2);
long long aa=querya_z(1,1,n,l1,r1);
//cout <<x<<" "<<y<<" "<<xx<<" "<<yy<<endl;
if(x<0&&xx>0&&y<0&&yy>0){
if(aa==1) cout <<0<<endl;
else{
long long aabs=querya_abs(1,1,n,l1,r1),babs=queryb_abs(1,1,m,l2,r2);
long long afu=querya_fu(1,1,n,l1,r1),bfu=queryb_fu(1,1,m,l2,r2);
cout <<max(afu*yy,aabs*y)<<endl;
}
}
if(x<0&&xx>0&&y<0&&yy<0){
cout <<x*yy<<endl;
}
if(x<0&&xx>0&&y>0&&yy>0){
cout <<y*xx<<endl;
}
//
if(x<0&&xx<0&&y<0&&yy<0){
cout <<x*yy<<endl;
}
if(x<0&&xx<0&&y<0&&yy>0){
cout <<yy*xx<<endl;
}
if(x<0&&xx<0&&y>0&&yy>0){
cout <<xx*yy<<endl;
}
//
if(x>0&&xx>0&&y<0&&yy>0){
cout <<y*x<<endl;//
}
if(x>0&&xx>0&&y<0&&yy<0){
cout <<x*y<<endl;// -
}
if(x>0&&xx>0&&y>0&&yy>0){
cout <<xx*y<<endl;// +
}
}
return 0;
}