« Stock span

Stock Span

Afzal has been working with an organization called 'Money Traders' for the past few years. The organization is into the money trading business. His manager assigned him a task. For a given array/list of stock's prices for N days, find the stock's span for each day.

The span of the stock's price today is defined as the maximum number of consecutive days(starting from today and going backwards) for which the price of the stock was less than today's price.

For example, if the price of a stock over a period of 7 days are [100, 80, 60, 70, 60, 75, 85], then the stock spans will be [1, 1, 1, 2, 1, 4, 6].

Explanation:

On the sixth day when the price of the stock was 75, the span came out to be 4, because the last 4 prices(including the current price of 75) were less than the current or the sixth day's price.

Similarly, we can deduce the remaining results.

Afzal has to return an array/list of spans corresponding to each day's stock's price. Help him to achieve the task.

Input Format:

The first line of input contains an integer N, denoting the total number of days.

The second line of input contains the stock prices of each day. A single space will separate them.

Output Format:

The only line of output will print the span for each day's stock price. A single space will separate them.

You are not required to print the expected output explicitly. It has already been taken care of.

Constraints:

0 <= N <= 10^7 1 <= X <= 10^9

Where X denotes the stock's price for a day.

Time Limit: 1 second

Sample Input 1:

4

10 10 10 10

Sample Output 1:

1 1 1 1

Sample Input 2:

8

60 70 80 100 90 75 80 120

Sample Output 2:

1 2 3 4 1 1 2 8

1#include <iostream>
2#include<stack>
3using namespace std;
4
5int* stockSpan(int *price, int size) {
6 // Write your code here
7 stack<int> st;
8 int *spans = new int[size];
9 spans[0]=1;
10 st.push(0);
11
12 for(int i=1; i<size; i++){
13 while(!st.empty() && price[st.top()] < price[i]){
14 st.pop();
15 }
16 if(st.empty()){
17 spans[i] = i + 1;
18 }else{
19 spans[i] = i-st.top();
20 }
21 st.push(i);
22 }
23
24 return spans;
25}
26
27int main() {
28 int size;
29 cin >> size;
30
31 int *input = new int[size];
32 for (int i = 0; i < size; i++) {
33 cin >> input[i];
34 }
35
36 int *output = stockSpan(input, size);
37 for (int i = 0; i < size; i++) {
38 cout << output[i] << " ";
39 }
40
41 cout << "\n";
42
43 delete[] input;
44 delete[] output;
45}