注意模数是2
辣么什么时候成立!
打表找规律
(n&m)==m
#include<bits/stdc++.h>
using namespace std;
typedef int INT;
#define int long long
const int N=240000;
const int mod=1e9+7;
inline void read(int &x){
x=0;
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
x*=f;
}
int n;
int a[N]={};
int p[N]={};
int f[N]={};
INT main(){
read(n);
for(int i=1;i<=n;i++)read(a[i]);
for(int i=1;i<=n;i++){p[a[i]]=i;f[a[i]]=1;}
for(int i=1;i<=n;++i)
for(int j=(a[i]-1)&a[i];j;j=(j-1)&a[i])
if(p[j]>i)
f[j]=(f[j]+f[a[i]])%mod;
/*for(int i=1;i<=n;i++){
for(int j=(a[i]-1)&a[i];j;j=(j-1)&a[i]){
if(p[j]>i){
f[j]=(f[j]+f[a[i]])%mod;
}
}
}*/
int ans=0;
int i,j;
for(i=0,j=1;j<=n;++j)
i=(i+f[a[j]]-1)%mod;
/*for(ans=0,j=1;j<=n;++j){
ans=(ans+f[a[j]]-1)%mod;
}*/
cout<<i;
return 0;
}