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