题意:
给你一个值都不为零的数组,分别找出有多少个连续的子串乘积小于零,大于零。
从首开始找负数字串,即有一个负数后,在下一个负数前这里面的都是负数子串。而其他的就为正数子串,正数子串初始化应为 ,所以得的正数子串最后应加上 。两个负数作为边上的元素的子串也可看为一个正数子串,负数子串和正数子串的乘积即为子串乘积为负数的数量。,例如 这个数组,它的负数子串为 ,正数子串为 , ,这个 ,一个是 ,一个是 。。负数个数出来了,用总数 减去负数个数便是正数的个数。
AC代码:
ll n, m, x;
ll res, ans1, ans2;
int main()
{
sld(n);
ll cnt1 = 0, cnt2 = 1, t = 1;
rep(i, 1, n)
{
sld(x);
if (x < 0)
t *= -1;
if (t > 0)
cnt2++;
else
cnt1++;
}
pldd(cnt1 * cnt2, n * (n + 1) / 2 - cnt1 * cnt2);
return 0;
}