感觉和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;
}
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;
}