BZOJ 4300 绝世好题

Posted on 2016-11-05 20:16  ziliuziliu  阅读(125)  评论(0编辑  收藏  举报

每一位维护一个最大值。

#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;
}