题解 P4310 【绝世好题】
题目链接:BZOJ 4300
给定一个长度为
数据范围:
Solution
我们可以设计出一个不朴素的
考虑优化,发现这个东西和
时间复杂度:
Code
#include <cstdio>
#include <algorithm>
const int N=35;
int n,f[N];
int main() {
scanf("%d",&n);
for(int x;n--;) {
scanf("%d",&x);
int mx=1;
for(int i=0;i<=30;++i) if(x&(1<<i)) mx=std::max(mx,f[i]+1);
for(int i=0;i<=30;++i) if(x&(1<<i)) f[i]=std::max(f[i],mx);
}
int ans=0;
for(int i=0;i<=30;++i) ans=std::max(ans,f[i]);
printf("%d\n",ans);
return 0;
}