(large{题目链接})
(\)
(Large extbf{Solution: } large{首先,异或有一个性质: ext{x} - ext{y} leq ext{x} oplus ext{y} leq ext{x} + ext{y}。\观察题目,容易发现,若一个区间符合要求,那么 ext{a}_l到 ext{a}_y的二进制每一位上最多只有一个1。\然后设f[l]为l所能拓展到的最右点,那么显然l + 1也符合条件,因为l+1中1的个数只可以比l少,所以l满足单增,可以用尺取法来维护。})
(Large extbf{Code: })
#include <bits/stdc++.h>
#define gc() getchar()
#define LL long long
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rep(i, a, b) for (int i = (a); i >= (b); --i)
using namespace std;
const int N = 2e5 + 5;
int n, a[N];
inline int read() {
int x = 0;
char ch = gc();
while (!isdigit(ch)) ch = gc();
while (isdigit(ch)) x = x * 10 + ch - '0', ch = gc();
return x;
}
int main() {
ios::sync_with_stdio(false);
n = read();
rep(i, 1, n) a[i] = read();
LL ans = 0;
for (int i = 1, l = 1, r = 1, cur = 0; i <= n; ++i) {
for (; !(cur & a[r]) && r <= n;) cur |= a[r++], ans += r - l;
cur ^= a[l++];
}
cout << ans << endl;
return 0;
}