➤ Problem Link : 448C. Painting Fence
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
ll divMerge(int a,int b,ll arr[],int n)
{
if(a==b)
return 1;
ll ans=0;
ll minH=pow(10,9)+1;
for(int i=a;i<=b;i++)
{
if(arr[i]<minH)
minH=arr[i];
}
ll minCnt=0;
for(int i=a;i<=b;i++)
{
if(arr[i]==minH)
minCnt++;
arr[i]-=minH;
}
ans=minH;
/*if(minCnt<minH)
{
for(int i=a;i<=b;i++)
if(arr[i]==minH)
arr[i]=0;
}
else
{
for(int i=a;i<=b;i++)
arr[i]-=minH;
}*/
int m=a,l=a;
while(m<=b)
{
while(m<=b && arr[m]==0)
m++;
if(m>b)
break;
l=m;
while(l<=b && arr[l]!=0)
l++;
ans+=divMerge(m,l-1,arr,n);
m=l;
}
return min(ans,(ll)b-a+1);
}
int main()
{
int n;
cin>>n;
ll arr[n];
for(int i=0;i<n;i++)
cin>>arr[i];
cout<<divMerge(0,n-1,arr,n);
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
