有趣的区间

x是奇数 ⇔ x的二进制最低位为1 
A[l] | ...|A[r]为奇数 ⇔ A[l~r]至少有一个数是奇数 

设以A[i]为右端点, 考虑它的左端点(<=i)能取哪些位置:
(1) 如果A[i]为奇数, 左端点可以随便取, 因为包含了A[i]这个奇数, 有i+1个
(2) 如果A[i]为偶数, 设上一个奇数在last, 那么[0,last]都可以取, 因为包含了A[last]这个奇数, 有last+1个

所以用一个变量记录最近的奇数位置, 从前往后遍历统计即可
import java.io.*;
import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in), 65535));

    static int I() throws IOException {
        st.nextToken();
        return (int) st.nval;
    }

    public static void main(String[] args) throws Exception {
        int n = I();
        boolean[] A = new boolean[n];//A[i]:是否为奇数(不关心大小,只看奇偶)
        for (int i = 0; i < n; i++) A[i] = I() % 2 == 1;

        long ans = 0;
        int last = -1; // 上一个奇数索引位置
        for (int i = 0; i < n; i++) { // 枚举右端点
            if (A[i]) { // A[i]为奇,左端点在[0,i]随便取
                ans += i + 1; // i+1种选择
                last = i; // 更新最近奇数位置
            } else { // A[i]为偶, 左端点在[0,last]随便取
                ans += last + 1; // last+1种选择
            }
        }
        System.out.println(ans);
    }
}