两个set维护在stack中和不在stack中的元素,priority_queue维护在stack中的最大元素

AC代码

#include <set>
#include <iostream>
#include <queue>
#include <cstdio>
#include <vector>
using namespace std;
int main(){
    int n,m,k;
    scanf("%d %d %d",&m,&n,&k);
    for(int i = 0;i < k;i++){
        set<int> inS;
        set<int> outS;
        priority_queue<int> s;
        bool flag(true);
        for(int j = 0;j < n;j++){
            int tmp;
            scanf("%d",&tmp);
            if(!s.empty() && s.top() > tmp){
                flag = false;
            }
            else if(!s.empty() && s.top() == tmp){
                inS.erase(tmp);
                s.pop();
                outS.insert(tmp);
            }
            else{
                for(int h = 1;h < tmp;h++){
                    if(inS.find(h) == inS.end() && outS.find(h) == outS.end()){
                        s.push(h);
                        inS.insert(h);
                    }
                }
                outS.insert(tmp);
            }
            if(s.size() >= m)
                flag = false;
        }
        if(flag)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

 

posted on 2016-03-03 21:12  aldorado  阅读(186)  评论(0编辑  收藏  举报