为什么矩阵最多只有 64×logn 个1啊
另外能不能帮忙看看这个代码为什么错了qwq,就是总贡献减去全0区间
#include<bits/stdc++.h>
#define Misaka namespace
#define Mikoto std
#define ull unsigned long long
using Misaka Mikoto;
namespace READ
{
ull Read()
{
char ch=getchar();
ull s=0;
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s;
}
ull tp[10005];
int l,r;
ull g1,g2;
void init(int &n)
{
int i,k;
n=Read(),k=Read(),l=1;
for(i=1;i<=k;i++)
tp[i]=Read();
}
ull read()
{
if(l>r)
l=Read(),r=Read(),g1=Read(),g2=Read();
return tp[l++]*g1+g2;
}
}
const int N=5e7+10;
ull a[N];
int lst[64];
signed main(){
int n;
READ::init(n);
for(int i=1;i<=n;i++) a[i]=READ::read();
ull ans=0;
for(int i=0;i<=63;i++){
ans+=(ull)n*(n+1)/2*(1ull<<i);
for(int j=1;j<=n;j++){
if(a[j]>>i&1) ans-=(ull)(j-lst[i]-1)*(j-lst[i])/2*(1ull<<i),lst[i]=j;
}
}
printf("%llu",ans);
return 0;
}