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