Syntax error Program to find range sum of sorted subarray sums using Python

Program to find range sum of sorted subarray sums using Python



Suppose we have an array nums with n positive elements. If we compute the sum of all non-empty contiguous subarrays of nums and then sort them in non-decreasing fashion, by creating a new array of n*(n+1)/2 numbers. We have to find the sum of the numbers from index left to index right (1-indexed), inclusive, in the new array. The answer may be very large so return result modulo 10^9 + 7.

So, if the input is like nums = [1,5,2,6] left = 1 right = 5, then the output will be 20 because here all subarray sums are 1, 5, 2, 6, 6, 7, 8, 8, 13, 14, so after sorting, they are [1,2,5,6,6,7,8,8,13,14], the sum of elements from index 1 to 5 is 1+5+2+6+6 = 20.

To solve this, we will follow these steps −

  • m := 10^9 + 7

  • n := size of nums

  • a:= a new list

  • for i in range 0 to n - 1, do

    • for j in range i to n - 1, do

      • if i is same as j, then


        • insert nums[j] at the end of a
      • otherwise,

        • insert ((nums[j] + last element of a) mod m) at the end of a

  • sort the list a

  • sm:= sum of all elements of a[from index left-1 to right])

  • return sm mod m

Let us see the following implementation to get better understanding −

Example

 Live Demo

def solve(nums, left, right):
   m = 10**9 + 7
   n = len(nums)
   a=[]
   for i in range(n):
      for j in range(i,n):
         if i==j:
            a.append(nums[j])
         else:
            a.append((nums[j]+a[-1])%m)
   a.sort()
   sm=sum(a[left-1:right])
   return sm % m
nums = [1,5,2,6]
left = 1
right = 5
print(solve(nums, left, right))

Input

[1,5,2,6], 1, 5

Output

20
Updated on: 2021-05-29T12:58:22+05:30

410 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements