给定一个长度为 消灭数组(秋季每日一题 27)_枚举

不断重复这个消灭一半数组的过程,直至数组变为升序为止。

请问,得以幸存的数组的最大可能长度是多少?

输入格式
第一行包含整数 消灭数组(秋季每日一题 27)_dfs_02,表示共有 消灭数组(秋季每日一题 27)_dfs_02

每组数据第一行包含整数 消灭数组(秋季每日一题 27)_枚举

第二行包含 消灭数组(秋季每日一题 27)_枚举 个整数 消灭数组(秋季每日一题 27)_dfs_06,表示给定数组。

输出格式
输出幸存数组的最大可能长度。

数据范围
消灭数组(秋季每日一题 27)_数据_07
消灭数组(秋季每日一题 27)_dfs_08消灭数组(秋季每日一题 27)_枚举 保证是 消灭数组(秋季每日一题 27)_枚举_10 的整数次幂。
消灭数组(秋季每日一题 27)_dfs_11

输入样例:

3
4
1 2 2 4
8
11 12 1 2 13 14 3 4
4
7 6 5 4

输出样例:

4
2
1

#include<iostream>

using namespace std;

const int N = 20;

int n;
int a[N];

int dfs(int l, int r){

if(l >= r) return 1;

bool flag = true;
for(int i = l + 1; i <= r; i++)
if(a[i] < a[i - 1])
flag = false;

if(flag) return r - l + 1;
int lc, rc, mid;
mid = l + r >> 1;
lc = dfs(l, mid);
rc = dfs(mid + 1, r);

return max(lc, rc);
}

int main(){

int t;
cin >> t;
while(t--){

cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];

cout << dfs(0, n - 1) << endl;
}

return 0;
}