# Differences between number of increasing subarrays and decreasing subarrays in k sized windows

Given an array of integers and k, find the difference between the number of the strictly increasing number of subarrays (of size more than one) and the number of the strictly decreasing subarray in the window of size k.

**Examples:**

Input : nums = {10, 20, 30, 15, 15}; k = 3; Output : 3, 0, -1 Explanation For the first window of [10, 20, 30], there are 3 increasing subranges ([10, 20, 30], [10, 20], and [20, 30]) and 0 decreasing, so the answer is 3. For the second window of [20, 30, 15], there is 1 increasing subrange and 1 decreasing, so the answer is 0. For the third window of [20, 15, 15], there is 1 decreasing subrange and 0 increasing, so the answer is -1.

We need to calculate the difference between increasing and decreasing subarrays for each of the window of size K. We iterate through the array and for each of the window of size k, we calculate the number of increasing and decreasing subarrays and insert the difference of them in the output array.

- Create two arrays of size N and initialize them by zero and create the output array.
- Iterate through array
- Calculate the numbers of increasing subarrays
- Calculate the decreasing subarrays
- Insert the difference between increasing and decreasing subarrays in output array.

Time Complexity of the solution- O(n*k)

n = Size of the array

k = Window size

## C++

`// CPP program to count the differenes ` `#include <iostream> ` `#include <vector> ` `using` `namespace` `std; ` ` ` `// function to calculate the diffrence ` `vector<` `int` `> Diffs(vector<` `int` `> ` `const` `& a, ` `int` `k) ` `{ ` ` ` `vector<` `int` `> out; ` ` ` `vector<` `int` `> inc, dec; ` ` ` ` ` `// initializing inc and dec with 0 and resizing ` ` ` `// equal to the size of main array ` ` ` `inc.resize(a.size(), 0); ` ` ` `dec.resize(a.size(), 0); ` ` ` ` ` `int` `inc_sum = 0; ` ` ` `int` `dec_sum = 0; ` ` ` ` ` `// iterate through the array ` ` ` `for` `(` `int` `i = 0; i < a.size(); ++i) { ` ` ` ` ` `// finding number of increasing ` ` ` `// subarrays in a window size k ` ` ` `for` `(` `int` `j = i - 1; j >= 0 && j > i - k && ` ` ` `a[j + 1] > a[j]; --j) { ` ` ` `++inc[j]; ` ` ` `++inc_sum; ` ` ` `} ` ` ` ` ` `// Finding number of decreasing subarrays ` ` ` `// in a window size k ` ` ` `for` `(` `int` `j = i - 1; j >= 0 && j > i - k && ` ` ` `a[j + 1] < a[j]; --j) { ` ` ` `++dec[j]; ` ` ` `++dec_sum; ` ` ` `} ` ` ` ` ` `// calculate the difference ` ` ` `if` `(i >= k - 1) { ` ` ` ` ` `// if this is not the first window then ` ` ` `// calculate inc_sum and dec_sum ` ` ` `if` `(i >= k) { ` ` ` `inc_sum -= inc[i - k]; ` ` ` `dec_sum -= dec[i - k]; ` ` ` `} ` ` ` ` ` `// insert the difference in k size window ` ` ` `// in the output vector ` ` ` `out.push_back(inc_sum - dec_sum); ` ` ` `} ` ` ` `} ` ` ` `return` `out; ` `} ` ` ` `// driver program ` `int` `main() ` `{ ` ` ` `vector<` `int` `> out = Diffs({ 10, 20, 30, 15, 15}, 3); ` ` ` `for` `(` `int` `n : out) ` ` ` `cout << n << ` `", "` `; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

# Python3 program to count the differences

# Function to calculate the diffrence

def Diffs(a, k):

out, inc, dec = [], [0] * len(a), [0] * len(a)

# Initializing inc and dec with 0 and

# resizing equal to the size of main array

inc_sum, dec_sum = 0, 0

# Iterate through the array

for i in range(0, len(a)):

# Finding number of increasing

# subarrays in a window size k

j = i – 1

while (j >= 0 and j > i – k and

a[j + 1] > a[j]):

inc[j] += 1

inc_sum += 1

j -= 1

# Finding number of decreasing

# subarrays in a window size k

j = i – 1

while (j >= 0 and j > i – k and

a[j + 1] < a[j]):
dec[j] += 1
dec_sum += 1
j -= 1
# calculate the difference
if i >= k – 1:

# if this is not the first window then

# calculate inc_sum and dec_sum

if i >= k:

inc_sum -= inc[i – k]

dec_sum -= dec[i – k]

# insert the difference in k size window

# in the output vector

out.append(inc_sum – dec_sum)

return out

# Driver Code

if __name__ == “__main__”:

out = Diffs([10, 20, 30, 15, 15], 3)

for n in out:

print(n, end = “, “)

# This code is contributed by Rituraj Jain

**Output:**

3, 0, -1,

## Recommended Posts:

- Count the number of non-increasing subarrays
- Find the count of Strictly decreasing Subarrays
- Count Strictly Increasing Subarrays
- Number of subarrays having sum less than K
- Number of subarrays having sum in a given range
- Number of subarrays with given product
- Maximize the number of subarrays with XOR as zero
- Number of subarrays have bitwise OR >= K
- Number of subarrays having sum of the form k^m, m >= 0
- Find number of subarrays with even sum
- Number of subarrays having product less than K
- Count the number of subarrays having a given XOR
- Number of subarrays having sum exactly equal to k
- Number of subarrays with m odd numbers
- Count subarrays with equal number of 1's and 0's

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.