http://www.lydsy.com/JudgeOnline/problem.php?id=4300
f[i] 表示第i位&为1的最长长度
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; void read(int &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } } int f[31]; int bit[31]; int x; int main() { int n; read(n); bit[0]=1; for(int i=1;i<=30;++i) bit[i]=bit[i-1]<<1; int tmp; while(n--) { read(x); tmp=0; for(int i=0;i<=30;++i) if(x&bit[i]) tmp=max(tmp,f[i]); tmp++; for(int i=0;i<=30;++i) if(x&bit[i]) f[i]=tmp; } int ans=0; for(int i=0;i<=30;++i) ans=max(ans,f[i]); cout<<ans; }
4300: 绝世好题
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2372 Solved: 1281
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3
Sample Output
HINT
n<=100000,ai<=2*10^9