过阳历但 0 RE+Wonderful Answer,求调
查看原帖
过阳历但 0 RE+Wonderful Answer,求调
300226
Heartindream楼主2023/10/16 21:00

QAQ

#include<bits/stdc++.h>
#define intt long long 
using namespace std;
const intt N=1e5+1009,M=32;
intt bminn[N][M],bmaxx[N][M],a_maxx[N][M]/*负数最大值*/,a_minn[N][M]/*非负数最小数*/,amaxx[N][M],aminn[N][M];
intt n,m,q,l,r,ll,rr;

inline intt read(){
	char s=getchar();
	intt x=0,f=1;
	while(s>'9'||s<'0'){
		if(s=='-') f=-1;
		s=getchar();
	} 
	while(s<'9'&&s>'0'){
		x=x*10+s-'0';
		s=getchar();
	}
	return f*x;
}

int main(){
	n=read(),m=read(),q=read();
	for(intt i=1;i<=n;i++){
		intt x=read();
//		cout<<x<<endl;
		amaxx[i][0]=aminn[i][0]=x;
		if(x<0) a_maxx[i][0]=x;
		else  a_maxx[i][0]=-1e18;
		if(x>=0) a_minn[i][0]=x;
		else a_minn[i][0]=1e18;
	}
	for(intt i=1;i<=m;i++)
		bminn[i][0]=bmaxx[i][0]=read();
	intt h=log(m);
	for(intt j=1;j<=h;j++){
		for(intt i=1;i<=n-(1<<j)+1;i++){
			bmaxx[i][j]=max(bmaxx[i][j-1],bmaxx[i+(1<<(j-1))][j-1]);
			bminn[i][j]=min(bminn[i][j-1],bminn[i+(1<<(j-1))][j-1]);
		}
	}
	h=log(n);
	for(intt j=1;j<=n;j++){
		for(intt i=1;i<=n-(1<<j)+1;i++){
			amaxx[i][j]=max(amaxx[i][j-1],amaxx[i+(1<<(j-1))][j-1]);
			aminn[i][j]=min(aminn[i][j-1],aminn[i+(1<<(j-1))][j-1]);
			a_minn[i][j]=min(a_minn[i][j-1],a_minn[i+(1<<(j-1))][j-1]);
			a_maxx[i][j]=max(a_maxx[i][j-1],a_maxx[i+(1<<(j-1))][j-1]);
		}
	}
	for(intt i=1;i<=q;i++){
		l=read(),r=read(),ll=read(),rr=read();
		intt k=(intt)log(rr-ll+1),h=(intt)log(r-l+1);
		intt x=max(bmaxx[ll][k],bmaxx[rr-(1<<k)+1][k]);
		intt xx=min(bminn[ll][k],bminn[rr-(1<<k)+1][k]);
//		cout<<x<<" "<<xx<<endl;
		if(x<0)	x *= min ( aminn[l][h] , aminn[ r - ( 1 << h ) + 1][h] );
		else x *= max ( a_maxx[l][h] , a_maxx[ r - ( 1 << h ) + 1][h] );
		if(xx<0) xx *= min ( a_minn[l][h] , a_minn[r - ( 1 << h ) + 1][h] );
		else xx *= max ( amaxx[l][h] , amaxx [r - ( 1 << h ) + 1] [h] );
		intt ans=max(x,xx);
		cout<<ans<<endl;
	}
} 
2023/10/16 21:00
加载中...