# Proizvolov’s Identity

Given two arrays **A** and **B** of size **N**. Array **A** is in increasing order and **B** is in decreasing order. Both arrays are the subsequences of the numbers from **1** to **2N**. The task is to find the sum of the absolute difference of two arrays.

Sum = |A

_{1}– B_{1}| + |A_{2}– B_{2}| + |A_{3}– B_{3}| + …. + |A_{N}– B_{N}|

**Examples:**

Input :A[] = {1, 2, 3, 4, 5}, B[] = {10, 9, 8, 7, 6}

Output :25

Input :A[] = {1, 5, 6, 8, 10, 12}, B[] = {11, 9, 7, 4, 3, 2}

Output :36

**Naive Approach:** A navie approach is to run a loop and find the sum of the absolute differences.

**Efficient Approach:** Proizvolov’s identity is an identity concerning sums of the differences of positive integers. It states that if we take first **2N** integers and partition them into two subsets of **N** numbers each.

Arrange one subset in increasing order : **A _{1} < A_{2} < A_{3} < …. < A_{N}**

Arrange another subset in decreasing order : **B _{1} > B_{2} > B_{3} > …. > B_{N}**

Then the sum **|A _{1} – B_{1}| + |A_{2} – B_{2}| + |A_{3} – B_{3}| + …. + |A_{N} – B_{N}|** is always equals to

**N**

^{2}Below is the implementation of the above approach:

## C++

`// CPP program to implement proizvolov's identity ` `#include<bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to implement proizvolov's identity ` `int` `proizvolov(` `int` `a[], ` `int` `b[], ` `int` `n) ` `{ ` ` ` `// According to proizvolov's identity ` ` ` `return` `n*n; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `a[] = {1, 5, 6, 8, 10}, b[] = {9, 7, 4, 3, 2}; ` ` ` ` ` `int` `n = ` `sizeof` `(a) / ` `sizeof` `(a[0]); ` ` ` ` ` `// Function call ` ` ` `cout << proizvolov(a, b, n); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to implement proizvolov's identity ` `class` `GFG ` `{ ` ` ` `// Function to implement proizvolov's identity ` ` ` `static` `int` `proizvolov(` `int` `a [], ` `int` `b [], ` `int` `n) ` ` ` `{ ` ` ` `// According to proizvolov's identity ` ` ` `return` `n * n; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `main (String[] args) ` ` ` `{ ` ` ` `int` `a [] = {` `1` `, ` `5` `, ` `6` `, ` `8` `, ` `10` `}; ` ` ` `int` `b [] = {` `9` `, ` `7` `, ` `4` `, ` `3` `, ` `2` `}; ` ` ` ` ` `int` `n = a.length; ` ` ` ` ` `// Function call ` ` ` `System.out.println(proizvolov(a, b, n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by ihritik ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to implement ` `# proizvolov's identity ` ` ` `# Function to implement ` `# proizvolov's identity ` `def` `proizvolov(a, b, n): ` ` ` `return` `n ` `*` `n ` ` ` `# Driver code ` `a ` `=` `[ ` `1` `, ` `5` `, ` `6` `, ` `8` `, ` `10` `] ` `b ` `=` `[ ` `9` `, ` `7` `, ` `4` `, ` `3` `, ` `2` `] ` `n ` `=` `len` `(a) ` ` ` `# Function call ` `print` `(proizvolov(a, b, n, )) ` ` ` `# This code is contributed by nidhiva ` |

*chevron_right*

*filter_none*

## C#

`// C# program to implement proizvolov's identity ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to implement proizvolov's identity ` ` ` `static` `int` `proizvolov(` `int` `[] a, ` ` ` `int` `[] b, ` `int` `n) ` ` ` `{ ` ` ` `// According to proizvolov's identity ` ` ` `return` `n * n; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `Main () ` ` ` `{ ` ` ` `int` `[] a = {1, 5, 6, 8, 10}; ` ` ` `int` `[] b = {9, 7, 4, 3, 2}; ` ` ` ` ` `int` `n = a.Length; ` ` ` ` ` `// Function call ` ` ` `Console.WriteLine(proizvolov(a, b, n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by ihritik ` |

*chevron_right*

*filter_none*

**Output:**

25

## Recommended Posts:

- Cassini’s Identity
- Brahmagupta Fibonacci Identity
- Significance of Pascal’s Identity
- Program for Identity Matrix
- Euler's Four Square Identity
- Concatenate the strings in an order which maximises the occurrence of subsequence "ab"
- Find if a degree sequence can form a simple graph | Havel-Hakimi Algorithm
- Replace elements with absolute difference of smallest element on left and largest element on right
- Print characters having prime frequencies in order of occurrence
- Minimum increment operations to make K elements equal
- Find the XOR of first N Prime Numbers
- Number of sub arrays with negative product
- Repeated sum of first N natural numbers
- Difference between Sum of Cubes and Sum of First N Natural Numbers

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.