Deque-STL

Given a set of arrays of size N and an integer K, you have to find the maximum integer for each and every contiguous subarray of size K for each of the given arrays.

Example:

Input: n = 5, k = 2, arr[n] = {3, 4, 6, 3, 4}
Output: 4 6 6 4 

Approach

C++

#include <bits/stdc++.h>
using namespace std;

void add(stack<pair<intint>> &st1int new_elem)
{
    if (st1.empty())
        st1.push({new_elemnew_elem});
    else
        st1.push({new_elemmax(new_elemst1.top().second)});
}
int get_max(stack<pair<intint>> &st1,
 stack<pair<intint>> &st2)
{
    int max1;
    if (st1.empty() || st2.empty())
        max1 = st1.empty() ? st2.top().second : st1.top().second;
    else
        max1 = max(st1.top().secondst2.top().second);
    return max1;
}
void remove(stack<pair<intint>> &st1
stack<pair<intint>> &st2)
{
    if (st2.empty())
    {
        while (!st1.empty())
        {
            int element = st1.top().first;
            st1.pop();
            int max1 = st2.empty() ? element :
 max(st2.top().secondelement);
            st2.push({elementmax1});
        }
    }
    st2.pop();
}
void printKMax(int arr[], int nint k)
{

    stack<pair<intint>> st1st2;
    for (int i = 0i < ki++)
        add(st1arr[i]);
    cout << get_max(st1st2<< " ";
    for (int i = ki < ni++)
    {

        remove(st1st2);
        add(st1arr[i]);
        cout << get_max(st1st2<< " ";
    }
    cout << "\n";
}

int main()
{

    int n = 5k = 2;

    int arr[n] = {34634};

    printKMax(arrnk);

    return 0;
}


No comments:

Post a Comment