➤ Problem Link : ANARC05B
👉 Hint : Binary search with cumulative array
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int int main() { int n,m; int ar1[10002]; int ar2[10002]; ll cum1[10002]; ll cum2[10002]; while(1) { cin>>n; if(n==0) break; memset(ar1,0,sizeof(ar1)); memset(ar2,0,sizeof(ar2)); for(int i=1;i<=n;i++) cin>>ar1[i]; cin>>m; for(int i=1;i<=m;i++) cin>>ar2[i]; int i=0; memset(cum1,0,sizeof(cum1)); memset(cum2,0,sizeof(cum2)); cum1[1]=ar1[1]; cum2[1]=ar2[1]; for(i=2;i<=n;i++) { cum1[i]=cum1[i-1]+ar1[i]; } for(i=2;i<=m;i++) { cum2[i]=cum2[i-1]+ar2[i]; } cum1[0]=0; cum2[0]=0; int ix=0,iy=0; ll ans=0,sum=0,su=0; for(i=1;i<=n;i++) { if(binary_search(ar2+iy+1,ar2+m+1,ar1[i])) { int y=lower_bound(ar2+iy+1,ar2+m+1,ar1[i])-ar2; if(cum1[i]-cum1[ix] > cum2[y]-cum2[iy]) ans+=cum1[i]-cum1[ix]; else ans+=cum2[y]-cum2[iy]; iy=y; ix=i; } } ix++,iy++; while(ix<=n) sum+=ar1[ix++]; while(iy<=m) su+=ar2[iy++]; ans+=max(sum,su); cout<<ans<<endl; } }
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!!