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';
}

浙公网安备 33010602011771号