123

☀️☃️☃️☃️☀️  •  2天前


include

include

include

using namespace std; int l1[200001], r1[200001], l2[200001], r2[200001]; int n; struct area {

int left, right;
bool operator < (area a2) {
	return left < a2.left;
}

}; bool ableless(int mid) {

long long big = 0, small = 0;
for (int i = 1; i <= n; i++) {
	if (l2[i] <= mid) small += r1[i];
	else big += l1[i];
}
return small >= big;

} bool ablemore(int mid) {

long long big = 0, small = 0;
for (int i = 1; i <= n; i++) {
	if (r2[i] >= mid) big += r1[i];
	else small += l1[i];
}
return big >= small + 1;

} int main() {

int c, t;
cin >> c >> t;
while (t--) {
	cin >> n;
	int left = 1e9, right = 0, ll, rr, minv, maxv;
	for (int i = 1; i <= n; i++) {
		cin >> l1[i] >> r1[i] >> l2[i] >> r2[i];
		left = min(left, l2[i]);
		right = max(right, r2[i]);
	}
	ll = left, rr = right;
	while (ll <= rr) {
		int mid = (ll + rr) / 2;
		if (ableless(mid)) {
			minv = mid;
			rr = mid - 1;
		}
		else ll = mid + 1;
	}

	ll = left, rr = right;
	while (ll <= rr) {
		int mid = (ll + rr) / 2;
		if (ablemore(mid)) {
			maxv = mid;
			ll = mid + 1;
		}
		else rr = mid - 1;
	}
	vector<area> list; int ans = 0;
	for (int i = 1; i <= n; i++) {
		if (l2[i] > maxv || r2[i] < minv) continue;
		list.push_back({ max(minv,l2[i]),min(maxv,r2[i]) });
	}
	sort(list.begin(), list.end());
	for (area ar : list) {
		if (ar.right >= minv) {
			ans += ar.right - max(minv, ar.left) + 1;
			minv = ar.right + 1;
		}
	}
	cout << ans << endl;
}

}


评论:

请先登录,才能进行评论