ST表,25求调
查看原帖
ST表,25求调
1098818
pbjyeee楼主2024/9/7 15:58
#include<bits/stdc++.h>
using namespace std;
const int MAXN=222;
long long n,m,p,act_result=0,zeroplace;
long long ans;
struct point{
	long long value,hash;
}lst1[MAXN],lst2[MAXN];
bool cmp(point a,point b){
	if(a.value>b.value){return true;}
	else{return false;}
}
void solve1(int x1,int x2,int y1,int y2){
	long long minv=1145141919,maxv=-1145141919,maxv2=-1145141919,minv2=1145141919;
	for(int i=1;i<=m;i++){if(lst2[i].hash>=y1&&lst2[i].hash<=y2){maxv=max(maxv,lst2[i].value);break;}}
	for(int i=m;i>=1;i--){if(lst2[i].hash>=y1&&lst2[i].hash<=y2){minv=min(minv,lst2[i].value);break;}}
	if(minv>=0){
		for(int i=1;i<=n;i++){if(lst1[i].hash>=x1&&lst1[i].hash<=x2){maxv2=max(maxv2,lst1[i].value);}}
		ans=maxv2*minv;
		return;
	}
	else if(maxv<=0){
		for(int i=n;i>=1;i--){if(lst1[i].hash>=x1&&lst1[i].hash<=x2){minv2=min(minv2,lst1[i].value);}}
		ans=minv2*maxv;
		return;
	}
	else if(maxv>0&&minv<0){
		for(int i=zeroplace;i<=n;i++){
			if(lst1[i].value<=0&&lst1[i].hash>=x1&&lst1[i].hash<=x2){
				minv2=min(lst1[i].value,minv2);break;}}
		for(int i=zeroplace;i>=1;i--){
			if(lst1[i].value>=0&&lst1[i].hash>=x1&&lst1[i].hash<=x2){
				maxv2=max(lst1[i].value,maxv2);break;}}
		ans=max(maxv2*minv,minv2*maxv);
		if(maxv2==-1145141919){ans=minv2*maxv;}
		else if(minv2==1145141919){ans=maxv2*minv;}
		return;
	}
}
void solve2(int x1,int x2,int y1,int y2){
	long long minv=1145141919,maxv=-1145141919,maxv2=-1145141919,minv2=1145141919;
}
int main(){
	cin>>n>>m>>p;
	for(int i=1;i<=n;i++){cin>>lst1[i].value;lst1[i].hash=i;}
	for(int i=1;i<=m;i++){cin>>lst2[i].value;lst2[i].hash=i;}
	sort(lst1+1,lst1+n+1,cmp);sort(lst2+1,lst2+m+1,cmp);
	for(int i=1;i<=n;i++){
		if(lst1[i].value<=0){
			zeroplace=i;
			break;
		}
	}
	for(int i=1;i<=p;i++){
		int xa,xb,ya,yb;
		cin>>xa>>xb>>ya>>yb;
		if((xb-xa)*(xb-xa)*4<n||(yb-ya)*(yb-ya)*4<m){
			
		}else{solve1(xa,xb,ya,yb);}
		cout<<ans<<endl;
	}
}

solve2还没写,只用st表会爆几个点TLE https://www.luogu.com.cn/record/176156345 求调谢谢

2024/9/7 15:58
加载中...