B. The Number of Products

https://codeforces.com/problemset/problem/1215/B

题意:给定长度为n的数组,统计有多少个[l, r]的区间相乘的结果是负数与正数。

思路:暴力破解O(n²)TLE,所以必须维护一些信息来进行查询。从左往右遍历,依次考虑当前位置i为区间右端点r时,有多少个l满足条件。当a[i] > 0, 正区间的总结果+1,并计入正区间数量答案中,负区间数量不变,计入负区间数量答案中。当a[i] < 0,负区间为之前正区间的数量+1,正区间数量为之前的负区间数量,并将两个数量分别计入答案中。

总结:题目不错,挺有意思

inline void solve() {
	int n;
	cin >> n;

	long long pos = 0;
	long long neg = 0;
	int odd = 0;
	int even = 0;
	for (int i = 0; i < n; ++i) {
		int t;
		cin >> t;
		if (t > 0) {
			pos ++;
			pos += even;
			neg += odd;
			even ++;
		}
		else {
			neg ++;
			neg += even;
			pos += odd;
			swap(odd, even);
			odd ++;
		}
	}

	cout << neg << ' ' << pos << '\n';
}
posted @ 2025-08-19 10:11  _Yxc  阅读(5)  评论(0)    收藏  举报