Related Articles
Find element at given index after given range reversals
• Difficulty Level : Basic
• Last Updated : 24 Dec, 2018

An array consisting of N elements is given. There are several reversals we do in unique ranges[L..R]. The task is to print the element at given index.

Examples:

```Input :
arr[] : 10 20 30 40 50
ranges[] = {{1, 4}, {0, 2}}
Query Index = 1
Output : 50
Explanation :
Reverse range[1..4] : 10 50 40 30 20
Reverse range[0..2] : 40 50 10 30 20
So we have 50 at index 1
```

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

The Brute Force approach would be to actually reverse a range of elements and answer the queries afterwards.

Efficient Method : If we observe, the reversal of range[L..R] will result as follows :
The index will become right + left – index.
By doing this, we can compute the index easily.

## C++

 `// Program to find index of an element after``// given range reversals.``#include ``using` `namespace` `std;`` ` `// Function to compute the element at query index``int` `answer(``int` `arr[], ``int` `ranges[], ``int` `reversals,``           ``int` `index)``{``    ``for` `(``int` `i = reversals - 1; i >= 0; i--) {``        ``// Range[left...right]``        ``int` `left = ranges[i], right = ranges[i];`` ` `        ``// If doesn't satisfy, reversal won't``        ``// have any effect``        ``if` `(left <= index && right >= index)``            ``index = right + left - index;``    ``}`` ` `    ``// Returning element at modified index``    ``return` `arr[index];``}`` ` `// Driver``int` `main()``{``    ``int` `arr[] = { 10, 20, 30, 40, 50 };`` ` `    ``// reversals``    ``int` `reversals = 2;``    ``int` `ranges[reversals] = { { 1, 4 }, { 0, 2 } };`` ` `    ``int` `index = 1;``    ``cout << answer(arr, ranges, reversals, index);`` ` `    ``return` `0;``}`

## Java

 `// Program to find index of an element``// after given range reversals.``import` `java.util.Arrays;`` ` `class` `GFG {``    ``// Function to compute the element at``    ``// query index``    ``static` `int` `answer(``int``[] arr, ``int``[][] ranges,``                      ``int` `reversals, ``int` `index)``    ``{``        ``for` `(``int` `i = reversals - ``1``; i >= ``0``; i--) {``            ``// Range[left...right]``            ``int` `left = ranges[i][``0``],``                ``right = ranges[i][``1``];`` ` `            ``// If doesn't satisfy, reversal``            ``// won't have any effect``            ``if` `(left <= index && right >= index)``                ``index = right + left - index;``        ``}`` ` `        ``// Returning element at modified index``        ``return` `arr[index];``    ``}`` ` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{`` ` `        ``int``[] arr = { ``10``, ``20``, ``30``, ``40``, ``50` `};`` ` `        ``// reversals``        ``int` `reversals = ``2``;``        ``int``[][] ranges = { { ``1``, ``4` `}, { ``0``, ``2` `} };`` ` `        ``int` `index = ``1``;``        ``System.out.println(answer(arr, ranges,``                                  ``reversals, index));``    ``}``}`` ` `/* This code is contributed by Mr. Somesh Awasthi */`

## Python3

 `# Program to find index of an element ``# after given range reversals.`` ` `# Function to compute the element``# at query index``def` `answer(arr, ranges, reversals, index):``    ``i ``=` `reversals ``-` `1``    ``while``(i >``=` `0``):``         ` `        ``# Range[left...right]``        ``left ``=` `ranges[i][``0``]``        ``right ``=` `ranges[i][``1``]`` ` `        ``# If doesn't satisfy, reversal won't``        ``# have any effect``        ``if` `(left <``=` `index ``and` `right >``=` `index):``            ``index ``=` `right ``+` `left ``-` `index``     ` `        ``i ``-``=` `1``     ` `    ``# Returning element at modified index``    ``return` `arr[index]`` ` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``arr ``=` `[``10``, ``20``, ``30``, ``40``, ``50``]`` ` `    ``# reversals``    ``reversals ``=` `2``    ``ranges ``=` `[ [ ``1``, ``4` `], [ ``0``, ``2` `] ]`` ` `    ``index ``=` `1``    ``print``(answer(arr, ranges,``                 ``reversals, index))`` ` `# This code is contributed by ``# Surendra_Gangwar`

## C#

 `// C# program to find index of an element``// after given range reversals.``using` `System;`` ` `class` `GFG {``     ` `    ``// Function to compute the element at``    ``// query index``    ``static` `int` `answer(``int``[] arr, ``int``[, ] ranges,``                       ``int` `reversals, ``int` `index)``    ``{``        ``for` `(``int` `i = reversals - 1; i >= 0; i--)``        ``{``             ` `            ``// Range[left...right]``            ``int` `left = ranges[i, 0],``                ``right = ranges[i, 1];`` ` `            ``// If doesn't satisfy, reversal``            ``// won't have any effect``            ``if` `(left <= index && right >= index)``                ``index = right + left - index;``        ``}`` ` `        ``// Returning element at modified index``        ``return` `arr[index];``    ``}`` ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{`` ` `        ``int``[] arr = { 10, 20, 30, 40, 50 };`` ` `        ``// reversals``        ``int` `reversals = 2;``        ``int``[, ] ranges = { { 1, 4 }, { 0, 2 } };`` ` `        ``int` `index = 1;``        ``Console.WriteLine(answer(arr, ranges,``                                ``reversals, index));``    ``}``}`` ` `// This code is contributed by vt_m.`

## PHP

 `= 0; ``\$i``--) ``    ``{``        ``// Range[left...right]``        ``\$left` `= ``\$ranges``[``\$i``]; ``        ``\$right` `= ``\$ranges``[``\$i``];`` ` `        ``// If doesn't satisfy,``        ``// reversal won't have ``        ``// any effect``        ``if` `(``\$left` `<= ``\$index` `&& ``            ``\$right` `>= ``\$index``)``            ``\$index` `= ``\$right` `+ ``\$left` `- ``                              ``\$index``;``    ``}`` ` `    ``// Returning element``    ``// at modified index``    ``return` `\$arr``[``\$index``];``}`` ` `// Driver Code``\$arr` `= ``array``( 10, 20, 30, 40, 50 );`` ` `// reversals``\$reversals` `= 2;``\$ranges` `= ``array``(``array``( 1, 4 ), ``                ``array``( 0, 2 ));`` ` `\$index` `= 1;``echo` `answer(``\$arr``, ``\$ranges``,``            ``\$reversals``, ``\$index``);`` ` `// This code is contributed ``// by nitin mittal.``?>`

Output :
```50
```

This article is contributed by Rohit Thapliyal. 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.