【模板】最值栈、最值队列

#include<bits/stdc++.h>
using namespace std;
stack<int>s;
vector<int>mins;
struct mstack
{
    stack<int>s,mins,maxs;
    void push(int x)
    {
        if(!s.empty())
        {
            s.push(x);
            mins.push(min(mins.top(),x));
            maxs.push(max(maxs.top(),x));
        }
        else
        {
            s.push(x);
            mins.push(x);
            maxs.push(x);
        }
        return;
    }
    void pop()
    {
        s.pop();
        mins.pop();
        maxs.pop();
        return;
    }
    int get_min()
    {
    	if(s.empty())return 1e9;
        return mins.top();
    }
    int get_max()
    {
    	if(s.empty())return -1e9;
        return maxs.top();
    }
    bool empty()
    {
    	return s.empty();
    }
    int top()
    {
    	return s.top();
    }
    int size()
    {
    	return s.size(); 
	} 
};
struct mqueue
{
    vector<int>temp;
    queue<int>que;
    mstack left,right;
    void pop()
    {
        if(!left.empty())
        {
            left.pop();
            que.pop();
        }
        else
        {
            while(!right.empty())
			{
				left.push(right.top());
				right.pop();
			}
            left.pop();
            que.pop();
        }
    }
    void push(int x)
    {
    	que.push(x);
    	right.push(x);
    }
    int get_max()
    {
    	return max(left.get_max(),right.get_max());
    }
    int get_min()
    {
    	return min(left.get_min(),right.get_min());
    }
    bool empty()
    {
    	return que.empty();
    }
    int front()
    {
    	return que.front();
    }
    int back()
    {
    	return que.back();
    }
    int size()
    {
    	return que.size(); 
	} 
};
int main()
{
	
    return 0;
}
0%