不要脸地复制了标程来“对拍”,随机数据和小数据全部过了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define ll long long
using namespace std;
ll n,m,a[400000],sum[400000],c[5]={1},ans;
int main(){
scanf("%lld",&n);
for(ll i=1;i<=n;i++){
ll a1,maxx=0;
scanf("%lld",&a1);
a[i]=__builtin_popcount(a1),sum[i]=sum[i-1]+a[i];
maxx=max(maxx,a[i]);
ans+=c[sum[i]%2];
for(ll j=i;j>=max(i-64,(ll)1);j--){
maxx=max(maxx,a[j]);
if(sum[i]-sum[j-1]<2*maxx&&(sum[i]-sum[j-1])%2==0)ans--;
}
++c[sum[i]%2];
}
cout<<ans;
}