悬赏关注,很朴素的ST表,调了一天,求助,救救孩子
查看原帖
悬赏关注,很朴素的ST表,调了一天,求助,救救孩子
591458
qinziao楼主2024/8/18 17:15

先提前辛苦各位,爱你,么么哒【比心】

//用6个ST表 
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5,nlo=25,inf=LONG_LONG_MAX,tinf=LONG_LONG_MIN;
int n,m,q,lo[N],amax[nlo][N],amin[nlo][N],bmax[nlo][N],bmin[nlo][N];
//              a最大值      a最小值      b最大值      b最小值 
int famax[nlo][N],zamin[nlo][N]; 
//  负数中a最大值   正数(包括0)中a最小值 
int main(){
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		amax[0][i]=amin[0][i]=x;
		if(x>=0){
			famax[0][i]=tinf;
			zamin[0][i]=x;
		}
		else{
			famax[0][i]=x;
			zamin[0][i]=inf;
		}
	}
	for(int i=1;i<=m;i++){
		int x;
		scanf("%d",&x);
		bmax[0][i]=bmin[0][i]=x;
	}
	lo[0]=-1;
	for(int i=1;i<=nlo;i++)
		lo[i]=lo[i>>1]+1;
	
	for(int i=1;i<=lo[n];i++)
		for(int j=1;j+(1<<i)-1<=n;j++){
			amax[i][j]=max(amax[i-1][j],amax[i-1][j+(1<<i-1)]);
			amin[i][j]=min(amin[i-1][j],amin[i-1][j+(1<<i-1)]);
			famax[i][j]=max(famax[i-1][j],famax[i-1][j+(1<<i-1)]);
			zamin[i][j]=min(zamin[i-1][j],zamin[i-1][j+(1<<i-1)]);
		}
	
	for(int i=1;i<=lo[m];i++)
		for(int j=1;j+(1<<i)-1<=m;j++){
			bmax[i][j]=max(bmax[i-1][j],bmax[i-1][j+(1<<i-1)]);
			bmin[i][j]=min(bmin[i-1][j],bmin[i-1][j+(1<<i-1)]);
		}

	while(q--){
		int a1,a2,b1,b2;
		scanf("%d%d%d%d",&a1,&a2,&b1,&b2);
		int s1=lo[a2-a1+1],s2=lo[b2-b1+1];
		ll ans1=0,ans2=0;
		ll xb=min(bmin[s2][b1],bmin[s2][b2-(1<<s2)+1]);
		// 最小b 
		ll db=max(bmax[s2][b1],bmax[s2][b2-(1<<s2)+1]);
		// 最大b 
		ll xa=min(amin[s1][a1],amin[s1][a2-(1<<s1)+1]);
		// 最小a 
		ll da=max(amax[s1][a1],amax[s1][a2-(1<<s1)+1]);
		// 最大a 
		ll zxa=min(zamin[s1][a1],zamin[s1][a2-(1<<s1)+1]);
		// 正数中最小a 
		ll fda=max(famax[s1][a1],famax[s1][a2-(1<<s1)+1]);
		// 负数中最大a 
		if(xb<0)//如果b的策略是拉低正数a,且b有负数 
			ans1=xb*zxa;//正数a要尽可能小 
		
		else//否则 
			ans1=xb*da;//正数a尽管大 
		
		if(db<0)//如果b的策略是让负数a更负,但b最大也只是负数 
			ans2=db*xa;//负数a的绝对值就要尽可能的大,然后负负得正 
		
		else//否则 
			ans2=db*fda;//负数a的绝对值就要尽可能的小 
		
		printf("%lld\n",max(ans1,ans2));
	}
	return 0;
} 
2024/8/18 17:15
加载中...