1060C. Maximum Subrectangle - Codeforces Solution C++

  Problem Link : 1060C. Maximum Subrectangle 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;

#define ll long long int

bool func(ll i, ll b[], ll m, ll p, ll x)
{
	if(i>m)
		return 0;
	ll mn=LONG_MAX;
	ll curr=0;
	ll k;
	for(k=0;k<i;k++)
		curr+=b[k];
	mn=min(mn,curr);
	for(;k<m;k++)
	{
		curr=curr+b[k]-b[k-i];
		mn=min(mn,curr);
	}
	return mn*p <= x ;

}

int main()
{
	int n,m;
	cin>>n>>m;
	ll a[n],b[m];
	for(int i=0;i<n;i++)
		cin>>a[i];
	for(int i=0;i<m;i++)
		cin>>b[i];
	ll x;
	cin>>x;
	ll mn,low=0,mid,high=m;
	ll ans=0;
	for(ll i=1;i<=n;i++)
	{
		mn=LONG_MAX;
		ll curr=0;
		ll k;
		for(k=0;k<i;k++)
			curr+=a[k];
		mn=min(mn,curr);
		for(;k<n;k++)
		{
			curr=curr+a[k]-a[k-i];
			mn=min(mn,curr);
		}
        low=0,high=m;
		while(low<high)
		{
			mid=low+(high-low+1)/2;
			if(func(mid,b,m,mn,x))
				low=mid;
			else
				high=mid-1;
		}

		ans=max(ans,high*i);

	}
	cout<<ans;
}

 

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!!