题目描述
直接再开一个b数组,其中b[i]=2*a[i+1]。然后从前往后遍历a数组,如果a[i]≤b[i],那么,说明它符合条件,子序列的长度加1,一直循环到a[i]不满足条件,此时,把子序列的长度重新置为1,然后从该位置开始,继续往后遍历a数组即可。
c++代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 200010;
int a[N],b[N];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
for (int i = 1; i <= n; i ++ ) b[i]=2*a[i-1];
int res=1;
for (int i = 1; i < n; i ++ )//注意a数组和b数组下标的对应
{
int len=1;
while(i<n&&a[i]<=b[i])
{
i++;
len++;
}
//cout << len << " ";
// puts("");
if(len>1) i--;
res=max(res,len);
}
cout << res;
return 0;
}