660C. Hard Process - Codeforces Solution C++

  Problem Link : 660C. Hard Process 


✅ C++ Solution :

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

int main()
{
	int n,k;
	cin>>n>>k;
	bool arr[n];
	for(int i=0;i<n;i++)
		cin>>arr[i];
	
	int cnt=0;
	int ot=0;
	int i=0,j=0,m=0;
	unordered_map<int,int > left,right;
	int prev=-1;
	int mx=0;
	for(j=0;j<n;j++)
	{

		if(!arr[j])
		{
			cnt++;
			left[j]=ot;
			if(prev!=-1)
				right[prev]=ot;
			prev=j;
			ot=0;

			if(cnt==1)
				i=j;
			if(cnt==k)
				m=j;
		}
		else
		{
			ot++;
			mx=max(ot,mx);
		}
		

	}
	if(k==0)
	{
		cout<<mx<<"\n";
		for(int i=0;i<n;i++)
			cout<<arr[i]<<" ";
		return 0;
	}
	right[prev]=ot;

	if(cnt<=k)
	{
		cout<<n<<endl;
		for(int i=0;i<n;i++)
			cout<<"1 ";
		return 0;
	}
	j=m;
	int ans=-1,l=-1,r=-1;
	int val;
	while(i<n)
	{
		if(j==n)
			val=j-i;
		else
			val=left[i]+right[j]+j-i+1;
		if(val>ans)
		{
			ans=val;
			if(j!=n)
			{
				l=i;
				r=j;
			}
			else
			{
				l=i;
				r=n-1;
				break;
			}

		}
		if(j==n)
			break;
		i++;
		while(i<n && arr[i])
			i++;
		j++;
		while(j<n && arr[j])
			j++;

	}

	cout<<ans<<"\n";
	for(int i=0;i<n;i++)
	{
		if(i>=l && i<=r)
			cout<<"1 ";
		else
			cout<<arr[i]<<" ";
	}



}

 

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