zoukankan      html  css  js  c++  java
  • Codeforces Round #420 C

    Okabe and Boxes

    题意:有2个操作,add x表示往栈里加入一个数x,remove表示从栈里拿出一个数,若要使得出栈的顺序为递增的,那么至少要对栈里面的元素进行多少次重新排序

    思路:stack模拟栈,优先队列模拟出栈,每次记录当前最顶上的元素top,用来和当前出栈的数比较,如果不相等,则进行排序,并标记f表示已经是排好序的位置,若相等,则出栈,然后更新top,注意更新top的时候是取优先队列里的还是stack里的数,若当前的位置大于f,则取栈里的元素更新top,否则取优先队列里的数

    AC代码:

    #include "iostream"
    #include "string.h"
    #include "stack"
    #include "queue"
    #include "string"
    #include "vector"
    #include "set"
    #include "map"
    #include "algorithm"
    #include "stdio.h"
    #include "math.h"
    #define ll long long
    #define bug(x) cout<<x<<" "<<"UUUUU"<<endl;
    #define mem(a) memset(a,0,sizeof(a))
    using namespace std;
    const int N=1e5+100;
    priority_queue<int,vector<int>,greater<int> > Q;
    int tot[3*N],t,p=1,ans,f,top;
    char s[10];
    int main(){
        int n,x;
        cin>>n;
        for(int i=1; i<=2*n; ++i){
            cin>>s;
            if(s[0]=='a'){
                cin>>x;
                Q.push(x);
                tot[++t]=x;
                top=x;
            }
            else{ //cout<<t<<" "<<f<<endl;cout<<top<<" "<<Q.top()<<endl;
                Q.pop();
                if(top==p){
                    p++;t--;
                    if(t>f){
                        top=tot[t];
                    }
                    else{
                        top=Q.top();
                        if(top==p) f--;
                    }
                }
                else{  //cout<<"uuuu"<<endl;
                    ans++;
                    p++;
                    top=Q.top();
                    f=--t;
                }
            }
        }
        cout<<ans;
        return 0;
    }
    /*
    3
    add 1
    remove
    add 2
    add 3
    remove
    remove
    7
    add 3
    add 2
    add 1
    remove
    add 4
    remove
    remove
    remove
    add 6
    add 7
    add 5
    remove
    remove
    remove
    6
    add 3
    add 4
    add 5
    add 1
    add 6
    remove
    add 2
    remove
    remove
    remove
    remove
    remove
    7
    add 4
    add 6
    add 1
    add 5
    add 7
    remove
    add 2
    remove
    add 3
    remove
    remove
    remove
    remove
    remove
    */
  • 相关阅读:
    06.django升级打怪学习记
    05.django升级打怪学习记
    04.django升级打怪学习记
    03.django升级打怪学习记
    02.django升级打怪学习记
    python学习手册笔记——39.元类
    python学习手册笔记——35.异常的设计
    关于我
    [Jenkins]Console Output中文显示问号的问题解决
    [Jenkins]JDK版本过高导致的java.io.IOException: Remote call on xxxx failed
  • 原文地址:https://www.cnblogs.com/max88888888/p/7101846.html
Copyright © 2011-2022 走看看