最长子列
Description
给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len)。
Input
输入文件共2行。
第一行包括一个整数n。
第二行包括n个整数,第i个整数表示ai。
Output
输出文件共一行。
包括一个整数,表示子序列bi的最长长度。
Sample Input
3
1 2 3
1 2 3
Sample Output
2
HINT
对于100%的数据,1<=n<=100000,ai<=10^9。
#include<iostream> #include <algorithm> using namespace std; int main() { int n = 0, maxa = 0; int bin_1[32]; int* a = new int[n]; memset(bin_1, 0, sizeof bin_1); memset(a, 0, sizeof(int)*n); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) { int mx = 0; for (int j = 0; j < 32; j++) if ((1 << j) & a[i]) mx = max(mx, bin_1[j] + 1); for (int j = 0; j < 32; j++) if ((1 << j) & a[i]) bin_1[j] = mx; } for (int i = 0; i < 32; i++) maxa = max(maxa, bin_1[i]); cout << maxa; }

浙公网安备 33010602011771号