zoukankan      html  css  js  c++  java
  • Codeforces Round #420 (Div. 2) C. Okabe and Boxes(O(n)做法)

    题目链接;Codeforces Round #420 (Div. 2) C. Okabe and Boxes

    题意:

    给你一些操作,add 一个数,remove一个数,这些操作都是在栈上进行。

    现在让你将所有remove的数要按照1到n的顺序。

    问你至少要重新排序几次。

    题解:

    其实一个优先队列+一个vector就可以过了的,这里贴一个O(n)的做法。

    首先开一个数组当作栈S使用,将add的数放进栈里。

    如果满足要要取得话,就正常按着栈S的顺序操作。

    如果不满足要求,此时就必须从新排序,然后我们就将栈S清空。

    记录一下当前应该输出什么,top就是什么。如果栈S还有元素,那么top就为栈顶。

    然后就可以O(n)过去了。

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;++i)
     3 using namespace std;
     4 
     5 const int N=3e5+7;
     6 int n,ans,S[N];
     7 int main(){
     8     scanf("%d",&n);
     9     char op[10];
    10     int x,top=0,size=0,now=1;
    11     while(~scanf("%s",op))
    12     {
    13         if(op[0]=='a')
    14         {
    15             scanf("%d",&x);
    16             top=x,S[++size]=x;
    17         }
    18         else
    19         {
    20             if(top!=now)ans++,size=0,top=++now;
    21             else
    22             {
    23                 if(size)size--;
    24                 if(size)top=S[size],++now;
    25                 else top=++now;
    26             }
    27         }
    28     }
    29     printf("%d
    ",ans);
    30     return 0;
    31 }
    View Code
  • 相关阅读:
    day34
    day33 UDP、进程
    Java RMI 框架(远程方法调用)
    Maven查看JAR包的依赖关系
    连接Oracle数据库的时候报了“Got minus one from a read call”
    Http、Socket和WebService协议之间的区别
    http 协议
    其它
    Jmeter-CSV data set config参数化
    英文
  • 原文地址:https://www.cnblogs.com/bin-gege/p/7079258.html
Copyright © 2011-2022 走看看