传送:http://codeforces.com/gym/102152/problem/K
题意:给定$n(n\le10^5)$个数$a_i(a_i\le10^9)$,对于任一个子数组中的数进行或操作,问所有的值有多少种?
分析:
假设现在想要求解区间$[1,i]$内的答案,那么需要先处理出$[1,i-1],[2,i-1],[3,i-1]......[i-1,i-1]$。然后将这些答案暴力与$a_i$取$|$。
代码:
#include<bits/stdc++.h>
using namespace std;
# define ll long long
const int maxn = 2e5+;
int a[maxn];
int main(){
int T;scanf("%d",&T);
while(T--){
int n;scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
set<int>ans;set<int>st;set<int>tmp;
for(int j=;j<=n;j++){
tmp.clear();tmp.insert(a[j]);
for(auto i : st) tmp.insert(i|a[j]);
st=tmp;
for(auto i: tmp) ans.insert(i);
}
printf("%d\n",ans.size());
}
return ;
}