题目链接:
K - Subarrays OR
题目大意:T组测试样例,然后n个数,让你求每一个l,r中有多少个不同的异或值。
具体思路:
对于(1,i)这个区间, 我们当前需要的信息是(1,i-1),(2.i-1),,,,(i-1.i-1)这个区间的信息,我们从第一个元素开始,将这些信息存储起来就好了,set去重。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 # define ll long long 4 const int maxn = 2e5+100; 5 int a[maxn]; 6 int main(){ 7 int T; 8 scanf("%d",&T); 9 while(T--){ 10 int n; 11 scanf("%d",&n); 12 for(int i=1;i<=n;i++){ 13 scanf("%d",&a[i]); 14 } 15 set<int>ans; 16 set<int>st; 17 set<int>tmp; 18 for(int j=1;j<=n;j++){ 19 tmp.clear(); 20 tmp.insert(a[j]); 21 for(auto i : st){ 22 tmp.insert(i|a[j]); 23 } 24 st=tmp; 25 for(auto i: tmp){ 26 ans.insert(i); 27 } 28 } 29 printf("%d ",ans.size()); 30 } 31 return 0; 32 }