和前面几位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];
}
}