编译不通过???
查看原帖
编译不通过???
1042486
larryia楼主2023/10/11 19:02

自己用DEV C++可以过,但是这里编译过不了

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <iostream>
#define LL long long
using namespace std;
const int N = 1e5 + 5;
int max(int a, int b) {
	return a > b ? a : b;
}
int min(int a, int b) {
	return a < b ? a : b;
}
LL queryMax(int l, int r, LL arr[N][21]) {
	int k = log2(r - l + 1);
	return max(arr[l][k], arr[r - (1 << k) + 1][k]);
}
LL queryMin(int l, int r, LL arr[N][21]) {
	int k = log2(r - l + 1);
	return min(arr[l][k], arr[r - (1 << k) + 1][k]);
}

int n, m, q;
LL a[N], b[N];
LL amx[N][21], amn[N][21], apn[N][21], anx[N][21], bmx[N][21], bmn[N][21];

const LL pi = LONG_LONG_MAX, ni = LONG_LONG_MIN;
int main() {
	//printf("%lld", LONG_LONG_MAX);
	scanf("%d%d%d", &n, &m, &q);
	for (int i = 1; i <= n; i++) {
		LL x;
		scanf("%lld", &x);
		amx[i][0] = amn[i][0] = x;
		anx[i][0] = (x < 0 ? x : ni);
		apn[i][0] = (x >= 0 ? x : pi); 
	}
	for (int i = 1; i <= m; i++) {
		LL x;
		scanf("%lld", &x);
		bmx[i][0] = bmn[i][0] = x;
	}
	for (int j = 1; j <= 21; j++) {
		for (int i = 1; i + (1 << j) - 1 <= n; i++) {
			int p = i + (1 << (j - 1));
			amx[i][j] = max(amx[i][j - 1], amx[p][j - 1]);
			anx[i][j] = max(anx[i][j - 1], anx[p][j - 1]);
			amn[i][j] = min(amn[i][j - 1], amn[p][j - 1]);
			apn[i][j] = min(apn[i][j - 1], apn[p][j - 1]);
		}
	}
	for (int j = 1; j <= 21; j++) {
		for (int i = 1; i + (1 << j) - 1 <= m; i++) {
			int p = i + (1 << (j - 1));
			bmx[i][j] = max(bmx[i][j - 1], bmx[p][j - 1]);
			bmn[i][j] = min(bmn[i][j - 1], bmn[p][j - 1]);
		}
	}
	while (q--) {
		int la, ra, lb, rb;
		scanf("%d%d%d%d", &la, &ra, &lb, &rb);
		LL amax = queryMax(la, ra, amx),
		   amin = queryMin(la, ra, amn),
		   bmax = queryMax(lb, rb, bmx),
		   bmin = queryMin(lb, rb, bmn),
		   anmax = queryMax(la, ra, anx),
		   apmin = queryMin(la, ra, apn);
		   //cout << amax << ' ' << amin << ' ' << bmax << ' ' << bmin << ' ' << anmax << ' ' << apmin << " debug" << endl; 
		if (amin >= 0) {
			//if (bmin >= 0) printf("%d")
			printf("%lld\n", bmin >= 0 ? amax * bmin : amin * bmin);
		}
		else if (amax < 0) printf("%lld\n", bmax >= 0 ? amax * bmax : amin * bmax);
		else { 
			if (bmin >= 0) printf("%lld\n", amax * bmin);
			else if (bmax < 0) printf("%lld\n", amin * bmax);
			else {
				printf("%lld\n", max(apmin * bmin, anmax * bmax));
			}
		}
	}
	return 0;
}
2023/10/11 19:02
加载中...