#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 300005, Mod = 998244353;
int T, n, a[35][N];
ll g[N], h[N], sumg[N], sumh[N], ans;
int main(){
int x;
scanf("%d", &n);
for(int i = 1, j; i <= n; i++){
scanf("%d", &x); j = 0;
while(x) a[j][i] = x & 1, x >>= 1, j++;
}
for(int j = 0; j <= 30; j++){
a[j][1] ? (h[1] = sumh[1] = 1) : (g[1] = sumg[1] = 1);
ans = (ans + sumh[1]) % Mod;
for(int i = 2; i <= n; i++){
g[i] = (a[j][i] ? h[i-1] : g[i-1] + 1) % Mod;
h[i] = (a[j][i] ? g[i-1] + 1 : h[i-1]) % Mod;
sumg[i] = (a[j][i] ? sumh[i-1] + g[i] : sumg[i-1] + g[i]) % Mod;
sumh[i] = (a[j][i] ? sumg[i-1] + h[i] : sumh[i-1] + h[i]) % Mod;
ans = (ans + (1<<j) * sumh[i]) % Mod;
}
for(int i = 1; i <= n; i++)
g[i] = h[i] = sumg[i] = sumh[i] = 0;
}
printf("%lld\n", ans);
return 0;
}
g[i] 记录右端点是 i 的偶区间数;
h[i] 记录右端点是 i 的奇区间数;
sumg[i] 记录右端点是 i 的偶区间长度和;
sumh[i] 记录右端点是 i 的奇区间长度和。
第一个样例过了,后两个样例答案少了,求助 T ^ T。