P8818求调
  • 板块题目总版
  • 楼主kobebraint
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/5 18:23
  • 上次更新2024/8/5 19:27:12
查看原帖
P8818求调
786726
kobebraint楼主2024/8/5 18:23
#include<bits/stdc++.h>
using namespace std;

char *p1,*p2,buf[100000];
#define gc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
inline long long read(){
    long long x=0,f=1;char ch=gc();
    while(ch<48||ch>57){if(ch=='-')f=-1;ch=gc();}
    while(ch>=48&&ch<=57)x=x*10+ch-48,ch=gc();
    return x*f;
}

#define rd read()
#define re register long long
#define ll long long
#define cl(a) memset(a,0,sizeof a)
#define szread(a,n) for(register long long i=1;i<=n;i++){cin>>a[i];}
#define forn(i,n) for(register long long i=1;i<=n;i++)
#define copy(a,b) copy(begin(a),end(a),begin(b))
#define fin(a) freopen(a,"r",stdin)
#define fout(a) freopen(a,"w",stdout)
#define ferr(a) freopen(a,"w",stderr)

ll amax[100050][30],amin[100050][30],amax2[100050][30],ans,
amin2[100050][30],bmax[100050][30],bmin[100050][30],ya,yb,
n,m,q,x,la,lb,ra,rb,maxa,mina,maxa2,mina2,maxb,minb,xa,xb;

int main(){
    n=rd,m=rd,q=rd;
    for(re i=1;i<=n;i++){
        x=read();
        amax[i][0]=amin[i][0]=x;
        if(x<0){
            amax2[i][0]=x;
            amin2[i][0]=1145141919810;
        }else{
            amin2[i][0]=x;
            amax2[i][0]=-1145141919810;
        }
    }
    for(re i=1;i<=m;i++){
        x=read();
        bmax[i][0]=bmin[i][0]=x;
    }
    for(re j=1;j<=log2(n);j++){
        for(re i=1;i+(1<<j)-1<=n;i++){
            amax[i][j]=max(amax[i][j-1],amax[i+(1<<(j-1))][j-1]);
            amax2[i][j]=max(amax2[i][j-1],amax2[i+(1<<(j-1))][j-1]);
            amin[i][j]=min(amin[i][j-1],amin[i+(1<<(j-1))][j-1]);
            amin2[i][j]=min(amin2[i][j-1],amin2[i+(1<<(j-1))][j-1]);
        }
    }
    for(re j=1;j<=log2(m);j++){
        for(re i=1;i+(1<<j)-1<=m;i++){
            bmax[i][j]=max(bmax[i][j-1],bmax[i+(1<<(j-1))][j-1]);
            bmin[i][j]=min(bmin[i][j-1],bmin[i+(1<<(j-1))][j-1]);
        }
    }
    while(q--){
        la=rd,ra=rd,lb=rd,rb=rd;
        xa=log2(ra-la+1),xb=log2(rb-lb+1);
        ya=ra-(1<<xa)+1,yb=rb-(1<<xb)+1;
        maxa=max(amax[la][xa],amax[ya][xa]);
        mina=min(amin[la][xa],amin[ya][xa]);
        maxa2=max(amax2[la][xa],amax2[ya][xa]);
        mina2=min(amin2[la][xa],amin2[ya][xa]);
        maxb=max(bmax[lb][xb],bmax[yb][xb]);
        minb=min(bmin[lb][xb],bmin[yb][xb]);
        ans=max(ans,maxa*(maxa>=0?minb:maxb));
        ans=max(ans,mina*(mina>=0?minb:maxb));
        if (maxa2!=-1145141919810){
            ans=max(ans,maxa2*(maxa2>=0?minb:maxb));
        }
        if (mina2!=1145141919810){
            ans=max(ans,mina2*(mina2>=0?minb:maxb));
        }
        cout<<ans<<endl;
    }
    return 0;
}

先谢谢各位了

2024/8/5 18:23
加载中...