#include<iostream> #include<algorithm> #include<cmath> #include<cstdio> #include<cstring> using namespace std; #define int long long int a[100]; int cal(int l,int r){/*返回长度*/ int mid=(l+r)/2; int sum=0; for(int i=l;i<=r;i++){ if(a[i]<a[i-1]&&i-1>=0){ return 0; } } return r-l+1; } int len=0; void dfs(int l,int r){ if(l>=r){ return ; } if(cal(l,r)){ len=max(len,cal(l,r)); return ; } int mid=(l+r)/2; dfs(l,mid); dfs(mid+1,r); } signed main(){ int t; scanf("%lld",&t); while(t--){ int n; len=0; scanf("%lld",&n); for(int i=0;i<n;i++){ scanf("%lld",&a[i]); } int sum=1; int s=1; dfs(0,n-1); printf("%lld\n",max(len,(int)1)); } }
注:就是要分清楚在哪里进行分块,还用到部分的dfs,其实这个数据暂时不用剪枝,主要是数据范围小