1042D. Petya and Array - Codeforces Solution C++

  Problem Link : 1042D. Petya and Array 


✅ C++ Solution :

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

#define ll long long int

ll divMerge(ll i, ll j, ll arr[],ll t)
{
	if(i==j)
	{
		if(arr[i]< t)
			return 1;
		return 0;
	}
	ll ans=0,k;
	if(i<j)
	{
		k=(i+j)/2;
		ans = divMerge(i,k,arr,t);
		ans += divMerge(k+1,j,arr,t);
		map<ll,ll> mp;
		ll sum=0;
		for(ll m=k+1;m<=j;m++)
		{
			sum+=arr[m];
			mp[sum]++;
		}
		auto it = mp.begin();
		auto it2=it;
		it2++;
		for(;it2!=mp.end();it++,it2++)
			(*it2).second += (*it).second;

		sum=0;
		for(ll m=k;m>=i;m--)
		{
			sum+=arr[m];
			it = mp.upper_bound(t-sum-1);
			if(it==mp.begin())
				continue;
			--it;
			ans+=(*it).second;

		}

	}
	return ans;
}

int main()
{
	ll n,t;
	cin>>n>>t;
	ll arr[n];
	for(ll i=0;i<n;i++)
		cin>>arr[i];
	cout<<divMerge(0,n-1,arr,t);
}

 

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

  Problem Link : 1042D. Petya and Array 


✅ C++ Solution :

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

#define ll long long int

ll divMerge(ll i, ll j, ll arr[],ll t)
{
	if(i==j)
	{
		if(arr[i]< t)
			return 1;
		return 0;
	}
	ll ans=0,k;
	if(i<j)
	{
		k=(i+j)/2;
		ans = divMerge(i,k,arr,t);
		ans += divMerge(k+1,j,arr,t);
		map<ll,ll> mp;
		ll sum=0;
		for(ll m=k+1;m<=j;m++)
		{
			sum+=arr[m];
			mp[sum]++;
		}
		auto it = mp.begin();
		auto it2=it;
		it2++;
		for(;it2!=mp.end();it++,it2++)
			(*it2).second += (*it).second;

		sum=0;
		for(ll m=k;m>=i;m--)
		{
			sum+=arr[m];
			it = mp.upper_bound(t-sum-1);
			if(it==mp.begin())
				continue;
			--it;
			ans+=(*it).second;

		}

	}
	return ans;
}

int main()
{
	ll n,t;
	cin>>n>>t;
	ll arr[n];
	for(ll i=0;i<n;i++)
		cin>>arr[i];
	cout<<divMerge(0,n-1,arr,t);
}

 

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