Problem statement:
- You are given a number n, representing the size of array a.
- You are given n numbers, representing elements of array a.
- You are required to "next greater element on the right" for all elements of array
- Input and output is handled for you.
"Next greater element on the right" of an element x is defined as the first element to right of x having value greater than x.
Note -> If an element does not have any element on it's right side greater than it, consider -1 as it's "next greater element on right"
e.g. for the array [2 5 9 3 1 12 6 8 7]
Next greater for 2 is 5
Next greater for 5 is 9
Next greater for 9 is 12
Next greater for 3 is 12
Next greater for 1 is 12
Next greater for 12 is -1
Next greater for 6 is 8
Next greater for 8 is -1
Next greater for 7 is -1
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
void display(vector<int> a) {
for(int i=0; i<a.size(); i++) {
cout << a[i] << endl;
}
}
vector<int> solve(vector<int> arr) {
vector<int> v;
stack<int> st;
st.push(arr[arr.size()-1]);
v[arr.size()-1] = -1;
for(int i=arr.size()-2; i>=0; i--) {
while(!st.empty() && arr[i]>=st.top()) {
st.pop();
}
if(st.empty()) {
v[i] = -1;
}
else {
v[i] = st.top();
}
st.push(arr[i]);
}
return v;
}
int main() {
int n;
cin >> n;
vector<int> arr(n, 0);
for(int i=0; i<n; i++) {
cin >> arr[i];
}
vector<int> nge(n, 0);
nge = solve(arr);
display(nge);
return 0;
}
This is my code and it gives a segmentation fault. How can I know the error in my code?