蒟蒻,暴力60分
查看原帖
蒟蒻,暴力60分
1461559
_Passer楼主2024/10/3 18:25

思路就是先让小L选一行,因为小Q要使得分最小所以枚举L2-R2的最小值(一行),接着再枚举L1-R1的每行最小值中的最大值

#include <bits/stdc++.h>
using namespace std;
long long min(long long A[], long long B[], long long l1, long long r1, long long l2, long long r2) {
	long long max = A[l1] * B[l2];
	if(l1 == r1) {
		for(long long j = l2; j <= r2;j++) {
			if(A[l1] * B[j] < max) {
				max = A[l1] * B[j];
			}
		}
	}
	else if(l2 == r2) {
		for(long long i = l1;i <= r1;i++) {
			if(A[i] * B[l2] > max) {
				max = A[i] * B[l2];
			}
		}
	}
	else {
	for(long long i = l1; i <= r1;i++) {
		long long min = A[i] * B[l2];
		for(long long j = l2; j <= r2;j++) {
			if(A[i] * B[j] < min) {
				min = A[i] * B[j];
			}
		}
		if(i == l1) {
			max = min;
		}
		if(min > max)
			max = min;
	}
	}
	return max;
}

int main() {
	freopen("game.in", "r", stdin);
	freopen("game.out", "w", stdout);
	long long n, m, q;
	cin>>n>>m>>q;
	long long A[n + 1];
	long long B[m + 1];
	for(long long i = 1;i <= n;i++) {
		cin>>A[i];
	}
	for(long long j = 1;j <= m;j++) {
		cin>>B[j];
	}
	for(long long i = 0;i < q;i++) {
		long long l1, r1, l2, r2;
		cin>>l1>>r1>>l2>>r2;
		cout<<min(A, B, l1, r1, l2, r2)<<endl;
	}
	return 0;
}

不会st表,不会线段树,想从正负性方面优化,不知道可不可以

2024/10/3 18:25
加载中...