蒟蒻求助95pts!
查看原帖
蒟蒻求助95pts!
907660
封禁用户楼主2023/1/6 19:29

codecode

#include<bits/stdc++.h>
#define ll __int128
#define rint register int
using namespace std;
const ll N=1e5,M=20,inf=9e18;
ll n,m,q,p,ans,a,b;
ll st1[N][M],st2[N][M],st3[N][M],st4[N][M],st5[N][M],st6[N][M];
ll la,ra,lb,rb,sa,pa,sb,pb,s1,s2,s3,s4,s5,s6;
inline __int128 read()
{
    rint x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-') f=-1;
	    ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=(x<<1)+(x<<3)+(ch^48);
	    ch=getchar();
    }
    return x*f;
}
void print(int x)
{
    if(x<0)
    {
        putchar('-');
	    x=-x;
    }
    if(x>9)
    {
        print(x/10);
	    putchar(x%10+'0');
    }
    else putchar(x+'0');
    return;
}
inline ll max(ll x,ll y){return x>y?x:y;}
int main(){
	n=read();m=read();q=read();
	for(int i=1;i<=n;i++){
		a=read();
		st1[i][0]=st2[i][0]=a;
		st3[i][0]=a<0?a:-inf;
		st4[i][0]=a>=0?a:inf;
	}
	for(int i=1;i<=m;i++){
		b=read();
		st5[i][0]=st6[i][0]=b;
	}
	for(int j=1;j<=log2(n);j++){
		for(int i=1;i-1+(1<<j)<=n;i++){
			p=i+(1<<(j-1));
			st1[i][j]=max(st1[i][j-1],st1[p][j-1]);
			st2[i][j]=min(st2[i][j-1],st2[p][j-1]);
			st3[i][j]=max(st3[i][j-1],st3[p][j-1]);
			st4[i][j]=min(st4[i][j-1],st4[p][j-1]);
		}
	}
	for(int j=1;j<=log2(m);j++){
		for(int i=1;i-1+(1<<j)<=m;i++){
			p=i+(1<<(j-1));
			st5[i][j]=max(st5[i][j-1],st5[p][j-1]);
			st6[i][j]=min(st6[i][j-1],st6[p][j-1]);
		}
	}
	while(q--){
		la=read();ra=read();la=read();lb=read();
		sa=log2(ra-la+1),sb=log2(rb-lb+1);
		pa=ra-(1<<sa)+1,pb=rb-(1<<sb)+1;
		s1=max(st1[la][sa],st1[pa][sa]);
		s2=min(st2[la][sa],st2[pa][sa]);
		s3=max(st3[la][sa],st3[pa][sa]);
		s4=min(st4[la][sa],st4[pa][sa]);
		s5=max(st5[lb][sb],st5[pb][sb]);
		s6=min(st6[lb][sb],st6[pb][sb]);
		ans=-inf;
		ans=max(ans,s1*(s1>=0?s6:s5));
		ans=max(ans,s2*(s2>=0?s6:s5));
		if(s3!=-inf)ans=max(ans,s3*(s3>=0?s6:s5));
		if(s4!=inf)ans=max(ans,s4*(s4>=0?s6:s5));
		print(ans);
		printf("\n");
	}
	return 0;
}

有哪位大佬能帮帮本蒟蒻?

2023/1/6 19:29
加载中...