fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. class Solution {
  4. public:
  5. int maxSumTwoNoOverlap(vector<int>& nums, int firstLen, int secondLen) {
  6. ///Senerio1
  7. int ans1=0;
  8. int i=0,j=firstLen-1,a=firstLen,b=a+secondLen-1;
  9. for(int i=1;i<nums.size();i++){
  10. nums[i]+=nums[i-1];
  11. }
  12. int s1=nums[j],max1=nums[j];
  13. int s2=nums[b]-nums[a-1];
  14. while(b<nums.size()){
  15. max1=max(s1,max1);
  16. ans1=max(ans1,max1+s2);
  17. j++;b++;if(b<nums.size()){
  18. s1=nums[j];s2=nums[b];
  19. }
  20. s1-=nums[i];s2-=nums[a];
  21. i++;a++;
  22. }
  23.  
  24. ///Senerio2
  25. int ans2=0;
  26. i=0;j=secondLen-1;a=secondLen;b=a+firstLen-1;
  27. s1=nums[j],max1=nums[j];
  28. s2=nums[b]-nums[a-1];
  29. while(b<nums.size()){
  30. max1=max(s1,max1);
  31. ans2=max(ans2,max1+s2);
  32. j++;b++;if(b<nums.size()){
  33. s1=nums[j];s2=nums[b];
  34. }
  35. s1-=nums[i];s2-=nums[a];
  36. i++;a++;
  37. }
  38. return max(ans1,ans2);
  39.  
  40. }
  41. };
  42. int main() {
  43. // your code goes here
  44. Solution x;
  45. int n;cin>>n;
  46. vector<int>v(n);
  47. for(int i=0;i<n;i++)cin>>v[i];
  48. int a,b;cin>>a>>b;
  49. cout<<x.maxSumTwoNoOverlap(v,a,b)<<endl;
  50. return 0;
  51. }
Success #stdin #stdout 0s 5320KB
stdin
9
0 6 5 2 2 5 1 9 4
1 2
stdout
20