10分求调
查看原帖
10分求调
599287
_masppy_楼主2023/7/1 14:25

感觉和CF448C很像,就把代码改了一下直接交了,但只过了第一个点

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+10;
ll n,m,q;
ll a[maxn];
int paint(ll l,ll r,ll ap){
    if(l==r) return 1;
    ll cnt=0;
    ll lh=1000000000;
    for(int i=l;i<=r;i++){
        lh=min(a[i],lh);
    }
    cnt++;
    for(ll i=l;i<=r;i++){
        if(a[i]==lh) continue;
        ll j=i;
        while(a[j+1]>lh&&j<r) j++;
        cnt=cnt+paint(i,j,lh);
        i=j;
    }
    //cout<<a[l]<<" "<<a[r]<<" "<<cnt<<" "<<lh<<endl;
    return min(cnt,r-l+1);
}
int main(){
    scanf("%lld",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
    }
    printf("%d",paint(1,n,0));
    return 0;
}

2023/7/1 14:25
加载中...