# Binary array after M range toggle operations

Consider a binary array consisting of N elements (initially all elements are 0). After that you are given M commands where each command is of form a b, which means you have to toggle all the elements of array in range a to b (both inclusive). After execution of all M commands you have to find the resultant array.

Examples:

```Input : N = 5, M = 3
C1 = 1 3, C2 = 4 5, C3 = 1 4
Output : Resultant array = {0, 0, 0, 0, 1}
Explanation :
Initial array : {0, 0, 0, 0, 0}
After first toggle : {1, 1, 1, 0, 0}
After second toggle : {1, 1, 1, 1, 1}
After third toggle :  {0, 0, 0, 0, 1}

Input : N = 5, M = 5
C1 = 1 5, C2 = 1 5, C3 = 1 5,
C4 = 1 5, C5 = 1 5
Output : Resultant array = {1, 1, 1, 1, 1}
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach : For given N we should create a bool array of n+1 element and for each of M commands we have to iterate from a to b and toggle all elements in range of a to b with help of XOR.
Complexity for this approach is O(n^2).

```for (int i = 1; i > a >> b;
for (int j = a; j <= b; j++)
arr[j] ^= 1;
```

Efficient Approach : The idea is based on sample problem discussed in Prefix Sum Array article. For given n, we create a bool array of n+2 element and for each of M commands we have to just toggle element a and b+1 with help of XOR. After all commands we will process the array as arr[i] ^= arr[i-1];
Complexity for this approach is O(n).

## C++

 `// CPP program to find modified array after  ` `// m range toggle operations. ` `#include ` `using` `namespace` `std; ` ` `  `// function for toggle ` `void` `command(``bool` `arr[], ``int` `a, ``int` `b) ` `{ ` `    ``arr[a] ^= 1; ` `    ``arr[b+1] ^= 1; ` `} ` ` `  `// function for final processing of array ` `void` `process(``bool` `arr[], ``int` `n) ` `{ ` `    ``for` `(``int` `k=1; k<=n; k++) ` `        ``arr[k] ^= arr[k-1]; ` `} ` ` `  `// function for printing result ` `void` `result(``bool` `arr[], ``int` `n) ` `{ ` `    ``for` `(``int` `k=1; k<=n; k++) ` `        ``cout << arr[k] <<``" "``; ` `} ` ` `  `// driver program ` `int` `main() ` `{ ` `    ``int` `n = 5, m = 3; ` `    ``bool` `arr[n+2] = {0}; ` ` `  `    ``// function call for toggle ` `    ``command(arr, 1, 5); ` `    ``command(arr, 2, 5); ` `    ``command(arr, 3, 5); ` `     `  `    ``// process array ` `    ``process(arr, n); ` `     `  `    ``// print result ` `    ``result(arr, n); ` `    ``return` `0; ` `}  `

## Java

 `// Java program to find modified array  ` `// after m range toggle operations.  ` `class` `GFG ` `{ ` ` `  `// function for toggle  ` `static` `void` `command(``boolean` `arr[],  ` `                    ``int` `a, ``int` `b) ` `{ ` `    ``arr[a] ^= ``true``; ` `    ``arr[b + ``1``] ^= ``true``; ` `} ` ` `  `// function for final processing of array  ` `static` `void` `process(``boolean` `arr[], ``int` `n)  ` `{ ` `    ``for` `(``int` `k = ``1``; k <= n; k++)  ` `    ``{ ` `        ``arr[k] ^= arr[k - ``1``]; ` `    ``} ` `} ` ` `  `// function for printing result  ` `static` `void` `result(``boolean` `arr[], ``int` `n)  ` `{ ` `    ``for` `(``int` `k = ``1``; k <= n; k++)  ` `    ``{ ` `        ``if``(arr[k] == ``true``) ` `            ``System.out.print(``"1"` `+ ``" "``); ` `        ``else` `            ``System.out.print(``"0"` `+ ``" "``); ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `n = ``5``, m = ``3``; ` `    ``boolean` `arr[] = ``new` `boolean``[n + ``2``]; ` ` `  `    ``// function call for toggle  ` `    ``command(arr, ``1``, ``5``); ` `    ``command(arr, ``2``, ``5``); ` `    ``command(arr, ``3``, ``5``); ` ` `  `    ``// process array  ` `    ``process(arr, n); ` ` `  `    ``// print result  ` `    ``result(arr, n); ` `} ` `} ` ` `  `// This code is contributed  ` `// by PrinciRaj1992 `

## Python3

 `# Python 3 program to find modified array after  ` `# m range toggle operations. ` ` `  `# function for toggle ` `def` `command(brr, a, b): ` `    ``arr[a] ^``=` `1` `    ``arr[b``+``1``] ^``=` `1` ` `  `# function for final processing of array ` `def` `process(arr, n): ` `    ``for` `k ``in` `range``(``1``, n ``+` `1``, ``1``): ` `        ``arr[k] ^``=` `arr[k ``-` `1``] ` ` `  `# function for printing result ` `def` `result(arr, n): ` `    ``for` `k ``in` `range``(``1``, n ``+` `1``, ``1``): ` `        ``print``(arr[k], end ``=` `" "``) ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``n ``=` `5` `    ``m ``=` `3` `    ``arr ``=` `[``0` `for` `i ``in` `range``(n``+``2``)] ` ` `  `    ``# function call for toggle ` `    ``command(arr, ``1``, ``5``) ` `    ``command(arr, ``2``, ``5``) ` `    ``command(arr, ``3``, ``5``) ` `     `  `    ``# process array ` `    ``process(arr, n) ` `     `  `    ``# print result ` `    ``result(arr, n) ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# program to find modified array  ` `// after m range toggle operations.  ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `// function for toggle  ` `static` `void` `command(``bool``[] arr,  ` `                    ``int` `a, ``int` `b) ` `{ ` `    ``arr[a] ^= ``true``; ` `    ``arr[b + 1] ^= ``true``; ` `} ` ` `  `// function for final processing of array  ` `static` `void` `process(``bool``[] arr, ``int` `n)  ` `{ ` `    ``for` `(``int` `k = 1; k <= n; k++)  ` `    ``{ ` `        ``arr[k] ^= arr[k - 1]; ` `    ``} ` `} ` ` `  `// function for printing result  ` `static` `void` `result(``bool``[] arr, ``int` `n)  ` `{ ` `    ``for` `(``int` `k = 1; k <= n; k++)  ` `    ``{ ` `        ``if``(arr[k] == ``true``) ` `            ``Console.Write(``"1"` `+ ``" "``); ` `        ``else` `            ``Console.Write(``"0"` `+ ``" "``); ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``int` `n = 5, m = 3; ` `    ``bool``[] arr = ``new` `bool``[n + 2]; ` ` `  `    ``// function call for toggle  ` `    ``command(arr, 1, 5); ` `    ``command(arr, 2, 5); ` `    ``command(arr, 3, 5); ` ` `  `    ``// process array  ` `    ``process(arr, n); ` ` `  `    ``// print result  ` `    ``result(arr, n); ` `} ` `} ` ` `  `// This code is contributed  ` `// by Akanksha Rai `

## PHP

 ` `

Output:

```1 0 1 1 1
```