同O(n log2n)Lis的思想,保存更新二进制每一位的可进行更新的最大值
/**************************************************************
Problem: 4300
User: Gobegobe
Language: C++
Result: Accepted
Time:188 ms
Memory:1288 kb
****************************************************************/
#include<bits/stdc++.h>
using namespace std;
int f[35];
int main()
{
int n , x , ans = 0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
int temp = 0;
for(int j=0;j<=30;j++)
if(x & (1<<j))
temp = max(temp , f[j]+1);
for(int j=0;j<=30;j++)
if(x & (1<<j))
f[j] = max(f[j] , temp);
}
for(int i=0;i<32;i++) ans = max(ans , f[i]);
cout<<ans;
return 0;
}