每一位维护一个最大值。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,x,a,ans=0,mx[64]; int main() { scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&x);int ret=0,cnt=0,now=x; while (now) { if (now&1) ret=max(ret,mx[cnt]); now>>=1;cnt++; } ans=max(ans,ret+1);cnt=0; while (x) { if (x&1) mx[cnt]=max(mx[cnt],ret+1); x>>=1;cnt++; } } printf("%d\n",ans); return 0; }