- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Maximum product of indexes of next greater on left and right in C++ Program
In this problem, we are given an array arr[]. Our task is to create a program to calculate the Maximum product of indexes of next greater on left and right.
Problem Description −
For the given array we need to find the product of maximum value of left[i]*right[i]. Both arrays are defined as −
left[i] = j, such that arr[i] <’. ‘ arr[j] and i > j. right[i] = j, such that arr[i] < arr[j] and i < j. *The array is 1 indexed.
Let’s take an example to understand the problem,
Input
arr[6] = {5, 2, 3, 1, 8, 6}
Output
15
Explanation
Creating left array, left[] = {0, 1, 1, 3, 0, 5} right[] = {5, 3, 5, 5, 0, 0} Index products : 1 −> 0*5 = 0 2 −> 1*3 = 3 3 −> 1*5 = 5 4 −> 3*5 = 15 5 −> 0*0 = 0 6 −> 0*5 = 0
Maximum product
15
Solution Approach −
To find the maximum product of the index of a greater element on the left and right of the element. We will first find the indexes of left and right greater and store their product for comparison.
Now, to find the greatest element of left and right, we will one by one check for greater elements in indexes value on left and right. To find we will use the stack. And do the following operations,
If stack is empty −> push current index, tos = 1. Tos is top of the stack Else if arr[i] > arr[tos] −> tos = 1.
Using this we can find index values of all elements greater than the given element of left and right of the array.
Example
Program to illustrate the working of our solution,
#include <bits/stdc++.h> using namespace std; int* findNextGreaterIndex(int a[], int n, char ch ) { int* greaterIndex = new int [n]; stack<int> index; if(ch == 'R'){ for (int i = 0; i < n; ++i) { while (!index.empty() && a[i] > a[index.top() − 1]) { int indexVal = index.top(); index.pop(); greaterIndex[indexVal − 1] = i + 1; } index.push(i + 1); } } else if(ch == 'L'){ for (int i = n − 1; i >= 0; i−−) { while (!index.empty() && a[i] > a[index.top() − 1]) { int indexVal = index.top(); index.pop(); greaterIndex[indexVal − 1] = i + 1; } index.push(i + 1); } } return greaterIndex; } int calcMaxGreaterIndedxProd(int arr[], int n) { int* left = findNextGreaterIndex(arr, n, 'L'); int* right = findNextGreaterIndex(arr, n, 'R'); int maxProd = −1000; int prod; for (int i = 1; i < n; i++) { prod = left[i]*right[i]; if(prod > maxProd) maxProd = prod; } return maxProd; } int main() { int arr[] = { 5, 2, 3, 1, 8, 6}; int n = sizeof(arr) / sizeof(arr[1]); cout<<"The maximum product of indexes of next greater on left and right is "<<calcMaxGreaterIndedxProd(arr, n); return 0; }
Output
The maximum product of indexes of next greater on left and right is 15
- Related Articles
- Maximum product of indexes of next greater on left and right in C++
- Find next Smaller of next Greater in an array in C++
- Maximum product of an increasing subsequence in C++ Program
- Maximum product subset of an array in C++ program
- Next Greater Element in C++
- Maximum points from top left of matrix to bottom right and return back in C++
- Binary representation of next greater number with same number of 1’s and 0’s in C Program?
- Find maximum difference between nearest left and right smaller elements in C++
- Maximum product of an increasing subsequence of size 3 in C++ program
- Left right subarray sum product - JavaScript
- Next Greater Element II in C++
- Next Greater Element III in C++
- Maximum difference between first and last indexes of an element in array in C
- Program to print right and left arrow patterns in C
- Maximum Product of Three Numbers in C++
