天梯赛_L3-002 特殊堆栈[1](stl)

团体程序设计天梯赛

L3-002 特殊堆栈

法一:使用vector维护。维护两个vector:堆栈s和有序数组orderedpushpop操作分别查找ordered的下界位置,使用insert()erase()函数操作,时间复杂度为O(n)peekmedian操作只需要取ordered数组的中间位置值即可,时间复杂度为O(1)

#include <bits/stdc++.h>
using namespace std;
vector<int> s, ordered;
int main(){
    int n;
    cin >> n;
    for(int i = 0; i <= n - 1; i++){
        string temp;
        int val;
        cin >> temp;
        if(temp == "Push"){
            cin >> val;
            s.push_back(val);
            auto it = lower_bound(ordered.begin(), ordered.end(), val);
            ordered.insert(it, val);
        }
        else if(temp == "Pop"){
            if(s.empty() == true){
                cout << "Invalid" << endl;
                continue;
            }
            else{
                val = s[(int)s.size() - 1];
                cout << val << endl;
                s.pop_back();
                auto it = lower_bound(ordered.begin(), ordered.end(), val);
                ordered.erase(it);
            }
        }
        else if(temp == "PeekMedian"){
            if(s.empty() == true){
                cout << "Invalid" << endl;
                continue;
            }
            else{
                int des = ((int)s.size() - 1) / 2;
                cout << ordered[des] << endl;
            }
        }
    }
    return 0;
}