2021.08.13(AcWing每日一题)

1.3802. 消灭数组 - AcWing题库

#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));
    }
}
View Code

注:就是要分清楚在哪里进行分块,还用到部分的dfs,其实这个数据暂时不用剪枝,主要是数据范围小

 

posted @ 2021-08-13 19:46  bonel  阅读(23)  评论(0编辑  收藏  举报