qiu tiao qaq
查看原帖
qiu tiao qaq
474899
QAQeee楼主2022/12/9 19:56
#include<iostream>
using namespace std;
struct aa {
	int ma = -0x3f3f3f3f;
	int pi = 0x3f3f3f3f;
	int na = -0x3f3f3f3f;
	int mi = 0x3f3f3f3f;
};
struct bb {
	int ma = -0x3f3f3f3f;
	int mi = 0x3f3f3f3f; 
};
aa treea[400100] = {};
bb treeb[400100] = {};
int a[100100] = {};
int b[100100] = {};
void build1(int l, int r, int id)  {
	if(l == r) {
		treea[id].ma = a[l];
		treea[id].mi = a[l];
		if(a[l] >= 0) {
			treea[id].pi = a[l];
		}
		else {
			treea[id].na = a[l];
		}
		return;
	}
	else {
		build1(l, (l + r) / 2, id << 1);
		build1((l + r) / 2 + 1, r, id << 1 + 1);
		int lc = id << 1;
		int rc = id << 1 + 1;
		treea[id].mi = min(treea[lc].mi, treea[rc].mi);
		treea[id].ma = max(treea[lc].ma, treea[rc].ma);
		treea[id].pi = min(treea[lc].pi, treea[rc].pi);
		treea[id].na = max(treea[lc].na, treea[rc].na);
	
	}
	return;
}
void build2(int l, int r, int id)  {
	if(l == r) {
		treeb[id].ma = b[l];
		treeb[id].mi = b[l];
		return;
	}
	else {
		build1(l, (l + r) / 2, id << 1);
		build1((l + r) / 2 + 1, r, id << 1 + 1);
		int lc = id << 1;
		int rc = id << 1 + 1;
		treeb[id].mi = min(treeb[lc].mi, treeb[rc].mi);
		treeb[id].ma = max(treeb[lc].ma, treeb[rc].ma);
	}
	return;
}
aa query1(int L, int R, int l, int r, int id) {
	if(L <= l && R >= r) {
		aa ans = treea[id];
		return ans;
	}
	else {
		int m = (l + r) >> 1;
		aa lc;
		aa rc;
		if(L <= m) {
			lc = query1(L, R, l, m, id << 1);
		}
		if(R > m) {
			rc = query1(L, R, m + 1, r, id << 1 + 1);
		}
		aa ean;
		ean.ma = max(lc.ma, rc.ma);
		ean.pi = min(lc.pi, rc.pi);
		ean.na = max(lc.na, rc.na);
		ean.mi = min(lc.mi, rc.mi);
		return ean;
	}

}
bb query2(int L, int R, int l, int r, int id) {
	if(L <= l && R >= r) {
		bb ans = treeb[id];
		return ans;
	}
	else {
		int m = (l + r) >> 1;
		bb lc;
		bb rc;
		if(L <= m) {
			lc = query2(L, R, l, m, id << 1);
		}
		if(R > m) {
			rc = query2(L, R, m + 1, r, id << 1 + 1);
		}
		bb ean;
		ean.ma = max(lc.ma, rc.ma);
		ean.mi = min(lc.mi, rc.mi);
		return ean;
	}
}
int main() {
	int n = 0;
	int m = 0;
	int q = 0;
	cin >> n >> m >> q;
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
	}
	for (int i = 1; i <= m; ++i) {
		cin >> b[i]; 
	}
	build1(1, n, 1);
	build2(1, m, 1);
	while(q--) {
		int l1 = 0;
		int r1 = 0;
		int l2 = 0;
		int r2 = 0;
		cin >> l1 >> r1 >> l2 >> r2;
		aa oa = query1(l1, r1, 1, n, 1);
		bb ob = query2(l2, r2, 1, n, 1);
		cout << oa.ma << " " << oa.mi << " " << oa.pi << " " << oa.na << endl;
		cout << ob.mi << " " << ob.ma << "eee" << endl;
		long long ans1 = oa.ma * ob.mi * 1ll;
		long long ans2 = oa.mi * ob.ma * 1ll;
		long long ans3 = -1000000000000000001;
		long long ans4 = -1000000000000000001;
		if(oa.na != -0x3f3f3f3f) {
			ans3 = oa.na * ob.ma * 1ll;
		}
		if(oa.pi != 0x3f3f3f3f) {
			ans4 = oa.pi * ob.mi * 1ll;
		}
//		cout << max(max(ans1, ans2), max(ans3, ans4)) << endl;
	}
	return 0;
}
2022/12/9 19:56
加载中...