st表求救!!
查看原帖
st表求救!!
1048929
zza_luogu楼主2024/8/3 10:46

0pt代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,q,a[100005],b[100005],lg[100005],sta1[100005][25],sta2[100005][25],stb1[100005][25],stb2[100005][25],l1,r1,l2,r2;
void d(){
	for(int i=2;i<=n;i++)lg[i]=lg[i/2]+1;
	return;
}
void pa1(){
	memset(sta1,0,sizeof(sta1));
	for(int i=1;i<=n;i++)sta1[i][0]=a[i];
	for(int k=0;k<=20;k++){
		for(int i=1;i+(2<<k)-1<=n;i++){
			sta1[i][k+1]=max(sta1[i][k],sta1[i+(1<<k)][k]);
		}
	}
	return;
}
void pa2(){
	memset(sta2,0x3f,sizeof(sta2));
	for(int i=1;i<=n;i++)sta2[i][0]=a[i];
	for(int k=0;k<=20;k++){
		for(int i=1;i+(2<<k)-1<=n;i++){
			sta2[i][k+1]=min(sta2[i][k],sta2[i+(1<<k)][k]);
		}
	}
	return;
}
void pb1(){
	memset(stb1,0,sizeof(stb1));
	for(int i=1;i<=m;i++)stb1[i][0]=b[i];
	for(int k=0;k<=20;k++){
		for(int i=1;i+(2<<k)-1<=m;i++){
			stb1[i][k+1]=max(stb1[i][k],stb1[i+(1<<k)][k]);
		}
	}
	return;
}
void pb2(){
	memset(stb2,0x3f,sizeof(stb2));
	for(int i=1;i<=m;i++)sta2[i][0]=b[i];
	for(int k=0;k<=20;k++){
		for(int i=1;i+(2<<k)-1<=m;i++){
			stb2[i][k+1]=min(stb2[i][k],stb2[i+(1<<k)][k]);
		}
	}
	return;
}
int qa1(int l,int r){
	int k=lg[r-l];
	return max(sta1[l][k],sta1[r-(1<<k)+1][k]);
}
int qa2(int l,int r){
	int k=lg[r-l];
	return min(sta2[l][k],sta2[r-(1<<k)+1][k]);
}
int qb1(int l,int r){
	int k=lg[r-l];
	return max(stb1[l][k],stb1[r-(1<<k)+1][k]);
}
int qb2(int l,int r){
	int k=lg[r-l];
	return min(stb2[l][k],stb2[r-(1<<k)+1][k]);
}
signed main(){
	cin>>n>>m>>q;
	d();
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++)cin>>b[i];
	pa1();
	pa2();
	pb1();
	pb2();
	while(q--){
		cin>>l1>>r1>>l2>>r2;
		cout<<max(min(qa1(l1,r1)*qb1(l2,r2),qa1(l1,r1)*qb2(l2,r2)),min(qa2(l1,r1)*qb1(l2,r2),qa2(l1,r1)*qb2(l2,r2)))<<"\n";
		
	}
	return 0;
}
2024/8/3 10:46
加载中...