正題
題目鏈接:https://www.luogu.com.cn/problem/P6102?contestId=26472
題目大意
個數的序列,求
題目大意
每一位分開來求
考慮分開來求,若爲1,爲0,那麼就是求
若爲0,爲1,那麼就是求
顯然這些都很容易求,這裏不再多講
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll XJQ=4294967296;
ll n,a[500100],ans;
int main()
{
scanf("%lld",&n);
for(ll i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(ll i=0;i<32;i++){
ll one=0,o=0,A=0;
for(ll j=1;j<=n;j++){
if(a[j]&(1ll<<i)){
o=(o+j*2-2)%XJQ;
A=(A+one*2)%XJQ;
one++;
o++;A++;
}
else o=(o+one*2)%XJQ;
}
o%=XJQ;A%=XJQ;
ans=(ans+o*((n*n%XJQ-A+XJQ)%XJQ)%XJQ*(1ll<<i)%XJQ)%XJQ;
ans=(ans+A*((n*n%XJQ-o+XJQ)%XJQ)%XJQ*(1ll<<i)%XJQ)%XJQ;
}
printf("%lld",ans);
}