对于区间和的问题,我们自然会转化为前缀和之差。另外,有关区间个数的题目,一般是遍历/固定一个端点,考察另一个端点的位置,这样区间的计数就不会重复和遗漏。
右端点位于i的区间,我们考虑左端点放在哪些位置可以满足条件呢?显然我们需要找到一个位置j,使得presum[i]-presum[j]是奇数,这样区间[j+1,i]的和一定就是奇数。所以我们只需要维护两个计数器,分别统计在i之前的presum里出现过多少次奇数count1和多少次偶数count2。如果presum[i]是奇数,那么就有count2个合适的左端点j可以与之匹配。如果presum[i]是偶数,那么就有count1个合适的左端点j可以与之匹配。
最终我们将每个i所对应的j的个数累加起来,就是答案。