Skip to content

Commit 77f8f8e

Browse files
Merge pull request ephremdeme#356 from amn2/stack
Stack based ques and solutions added using C++ STL
2 parents 3f8b488 + 9ab69c3 commit 77f8f8e

File tree

5 files changed

+296
-0
lines changed

5 files changed

+296
-0
lines changed

stack/(1)NGR.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
typedef long long ll;
4+
#define mod 1000000007
5+
#define endl "\n"
6+
7+
vector<int> v;
8+
stack<int> s;
9+
10+
// Nearest Greater to Right - NGR
11+
void solve(int a[], int n) {
12+
13+
for (int i = n - 1; i >= 0; i--) {
14+
15+
if (s.size() == 0) {
16+
v.push_back(-1);
17+
}
18+
19+
else if (s.size() > 0 && s.top() > a[i]) {
20+
v.push_back(s.top());
21+
}
22+
else if (s.size() > 0 && s.top() <= a[i]) {
23+
while (s.size() > 0 && s.top() <= a[i]) {
24+
s.pop();
25+
}
26+
27+
if (s.size() == 0) v.push_back(-1);
28+
else v.push_back(s.top());
29+
}
30+
31+
s.push(a[i]);
32+
33+
}
34+
35+
}
36+
37+
38+
int main()
39+
{
40+
41+
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
42+
43+
#ifndef ONLINE_JUDGE
44+
freopen("input.txt", "r", stdin);
45+
freopen("output.txt", "w", stdout);
46+
#endif
47+
48+
int n;
49+
cin >> n;
50+
int a[n];
51+
52+
for (int i = 0; i < n; i++) cin >> a[i];
53+
solve(a, n);
54+
55+
reverse(v.begin(), v.end());
56+
for (int i = 0; i < n; i++) cout << v[i] << " ";
57+
58+
}
59+

stack/(2)NGL.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
typedef long long ll;
4+
#define mod 1000000007
5+
#define endl "\n"
6+
7+
vector<int> v;
8+
stack<int> s;
9+
10+
// Nearest Greater to left - NGL
11+
void solve(int a[], int n) {
12+
13+
for (int i = 0; i < n; i++) {
14+
15+
if (s.size() == 0) {
16+
v.push_back(-1);
17+
}
18+
19+
else if (s.size() > 0 && s.top() > a[i]) {
20+
v.push_back(s.top());
21+
}
22+
else if (s.size() > 0 && s.top() <= a[i]) {
23+
while (s.size() > 0 && s.top() <= a[i]) {
24+
s.pop();
25+
}
26+
27+
if (s.size() == 0) v.push_back(-1);
28+
else v.push_back(s.top());
29+
}
30+
31+
s.push(a[i]);
32+
33+
}
34+
35+
}
36+
37+
38+
int main()
39+
{
40+
41+
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
42+
43+
#ifndef ONLINE_JUDGE
44+
freopen("input.txt", "r", stdin);
45+
freopen("output.txt", "w", stdout);
46+
#endif
47+
48+
int n;
49+
cin >> n;
50+
int a[n];
51+
52+
for (int i = 0; i < n; i++) cin >> a[i];
53+
solve(a, n);
54+
55+
// reverse(v.begin(), v.end());
56+
for (int i = 0; i < n; i++) cout << v[i] << " ";
57+
58+
}
59+

stack/(3)NSR.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
typedef long long ll;
4+
#define mod 1000000007
5+
#define endl "\n"
6+
7+
vector<int> v;
8+
stack<int> s;
9+
10+
// Nearest Smaller to Right - NSR
11+
void solve(int a[], int n) {
12+
13+
for (int i = n - 1; i >= 0 ; i--) {
14+
15+
if (s.size() == 0) {
16+
v.push_back(-1);
17+
}
18+
19+
else if (s.size() > 0 && s.top() < a[i]) {
20+
v.push_back(s.top());
21+
}
22+
else if (s.size() > 0 && s.top() >= a[i]) {
23+
while (s.size() > 0 && s.top() >= a[i]) {
24+
s.pop();
25+
}
26+
27+
if (s.size() == 0) v.push_back(-1);
28+
else v.push_back(s.top());
29+
}
30+
31+
s.push(a[i]);
32+
33+
}
34+
35+
}
36+
37+
38+
int main()
39+
{
40+
41+
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
42+
43+
#ifndef ONLINE_JUDGE
44+
freopen("input.txt", "r", stdin);
45+
freopen("output.txt", "w", stdout);
46+
#endif
47+
48+
int n;
49+
cin >> n;
50+
int a[n];
51+
52+
for (int i = 0; i < n; i++) cin >> a[i];
53+
solve(a, n);
54+
55+
reverse(v.begin(), v.end());
56+
for (int i = 0; i < n; i++) cout << v[i] << " ";
57+
58+
}
59+

stack/(4)NSL.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
typedef long long ll;
4+
#define mod 1000000007
5+
#define endl "\n"
6+
7+
vector<int> v;
8+
stack<int> s;
9+
10+
// Nearest Smaller to Left - NSL
11+
void solve(int a[], int n) {
12+
13+
for (int i = 0; i < n; i++) {
14+
15+
if (s.size() == 0) {
16+
v.push_back(-1);
17+
}
18+
19+
else if (s.size() > 0 && s.top() < a[i]) {
20+
v.push_back(s.top());
21+
}
22+
else if (s.size() > 0 && s.top() >= a[i]) {
23+
while (s.size() > 0 && s.top() >= a[i]) {
24+
s.pop();
25+
}
26+
27+
if (s.size() == 0) v.push_back(-1);
28+
else v.push_back(s.top());
29+
}
30+
31+
s.push(a[i]);
32+
33+
}
34+
35+
}
36+
37+
38+
int main()
39+
{
40+
41+
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
42+
43+
#ifndef ONLINE_JUDGE
44+
freopen("input.txt", "r", stdin);
45+
freopen("output.txt", "w", stdout);
46+
#endif
47+
48+
int n;
49+
cin >> n;
50+
int a[n];
51+
52+
for (int i = 0; i < n; i++) cin >> a[i];
53+
solve(a, n);
54+
55+
// reverse(v.begin(), v.end());
56+
for (int i = 0; i < n; i++) cout << v[i] << " ";
57+
58+
}
59+

stack/(5)StockSpan.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
typedef long long ll;
4+
#define mod 1000000007
5+
#define endl "\n"
6+
7+
//Stock Span Problem
8+
vector<int> v;
9+
stack<pair<int, int>> s;
10+
11+
// Nearest Greater to Left - NGL
12+
void solve(int a[], int n) {
13+
14+
for (int i = 0; i < n; i++) {
15+
16+
if (s.size() == 0) {
17+
v.push_back(-1);
18+
}
19+
20+
else if (s.size() > 0 && s.top().first > a[i]) {
21+
v.push_back(s.top().second);
22+
}
23+
else if (s.size() > 0 && s.top().first <= a[i]) {
24+
while (s.size() > 0 && s.top().first <= a[i]) {
25+
s.pop();
26+
}
27+
28+
if (s.size() == 0) v.push_back(-1);
29+
else v.push_back(s.top().second);
30+
}
31+
32+
s.push({a[i], i});
33+
34+
}
35+
36+
}
37+
38+
39+
int main()
40+
{
41+
42+
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
43+
44+
#ifndef ONLINE_JUDGE
45+
freopen("input.txt", "r", stdin);
46+
freopen("output.txt", "w", stdout);
47+
#endif
48+
49+
int n;
50+
cin >> n;
51+
int a[n];
52+
53+
for (int i = 0; i < n; i++) cin >> a[i];
54+
solve(a, n);
55+
56+
// reverse(v.begin(), v.end());
57+
for (int i = 0; i < n; i++) cout << i - v[i] << " ";
58+
59+
}
60+

0 commit comments

Comments
 (0)