AcWing 4489. 最长子序列
原题链接
中等
作者:
Java同学
,
2022-07-02 20:36:00
,
所有人可见
,
阅读 183
注意 因为B[i] 表示的是 存在 A[i + 1] <= A[i] * 2 也就是说包含了两个数 ,所以B[i] = 1 时候 包含的长度是2
最后输出结果 + 1 的同时 也能够保证 当没有数字符合要求时候,长度为 1
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 2e6 + 10;
int A[N];
int B[N];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
scanf("%d", &A[i]);
}
for (int i = 1; i < n; i++)
{
if (A[i + 1] <= A[i] * 2)
{
B[i] = 1;
}
else
{
B[i] = 0;
}
}
int max_len = 0;
for (int i = 1; i < n; i++)
{
int current_len = 0;
if (B[i] == 1)
{
current_len++;
while (B[i + 1] == 1)
{
current_len++;
i++;
}
max_len = max(max_len, current_len);
}
if (B[i] == 0)
{
continue;
}
}
cout << max_len + 1;
return 0;
}