[水] 关于ide和本地的玄学问题
查看原帖
[水] 关于ide和本地的玄学问题
274935
_Z_Y_X_楼主2022/10/30 08:31

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;
}
2022/10/30 08:31
加载中...