堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除)。本题要求你实现另一个附加的操作:“取中值”——即返回所有堆栈中元素键值的中值。给定 N 个元素,如果 N 是偶数,则中值定义为第 N/2 小元;若是奇数,则为第 (N+1)/2 小元。

输入格式:

输入的第一行是正整数 N(≤)。随后 N 行,每行给出一句指令,为以下 3 种之一:

  1. Push key
  2. Pop
  3. PeekMedian

其中 key 是不超过 1 的正整数;Push 表示“入栈”;Pop 表示“出栈”;PeekMedian 表示“取中值”。

输出格式:

对每个 Push 操作,将 key 插入堆栈,无需输出;对每个 Pop 或 PeekMedian 操作,在一行中输出相应的返回值。若操作非法,则对应输出 Invalid

输入样例:

  1. 17
  2. Pop
  3. PeekMedian
  4. Push 3
  5. PeekMedian
  6. Push 2
  7. PeekMedian
  8. Push 1
  9. PeekMedian
  10. Pop
  11. Pop
  12. Push 5
  13. Push 4
  14. PeekMedian
  15. Pop
  16. Pop
  17. Pop
  18. Pop

输出样例:

  1. Invalid
  2. Invalid
  3. 3
  4. 2
  5. 2
  6. 1
  7. 2
  8. 4
  9. 4
  10. 5
  11. 3
  12. Invalid
  13.  
  14. 用两个vector 一个维护栈 一个维护中值
    char string真的快了很多很多!!!!! 如果遇到大规模的题用char
    还有个就是用lowbound 而不是用find的细节
    要在vectorlowbound 用迭代器来接收地址
    eraseit it也是迭代器
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //input
  4. #define rep(i,a,b) for(int i=(a);i<=(b);i++)
  5.  
  6. #define RI(n) scanf("%d",&(n))
  7. #define RII(n,m) scanf("%d%d",&n,&m);
  8. #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
  9. #define RS(s) scanf("%s",s);
  10. #define LL long long
  11. #define REP(i,N) for(int i=0;i<(N);i++)
  12. #define CLR(A,v) memset(A,v,sizeof A)
  13. //////////////////////////////////
  14. #define N 1020
  15.  
  16. int main()
  17. {
  18. vector<int>v;
  19. vector<int>v2;
  20. int n;
  21. RI(n);
  22. char str[];
  23. vector<int>::iterator it;
  24. while(n--)
  25. {
  26. RS(str);//这里用char 比string类型的快了100ms 读写真的影响很大
  27. if(str[]=='u')
  28. {
  29. int x;
  30. RI(x);
  31. v.push_back(x);
  32. it=lower_bound(v2.begin(),v2.end(),x);
  33. v2.insert(it,x);
  34. }
  35. else if(str[]=='o')
  36. {
  37. if(!v.size())printf("Invalid\n");
  38. else
  39. {
  40. cout<< v[ v.size()- ]<<endl;
  41. it=lower_bound(v2.begin(),v2.end(),v[v.size()-] );//这里用lowbound比find 快很多 因为已经排序好了
  42. v2.erase(it);
  43. v.pop_back();
  44. }
  45. }
  46. else
  47. {
  48. if(!v.size())printf("Invalid\n");
  49. else
  50. printf("%d\n",v2[ (v2.size()-)/]);
  51. }
  52. }
  53. return ;
  54. }
  1.  

L3-002 特殊堆栈 (30 分) 模拟stl的更多相关文章

  1. L3-002 特殊堆栈 (30分) vector容器的模拟、vector容器的一些用法

    vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来 为这个数找一个应该插入到vector的位置.另外再找一个数组来 ...

  2. 2018.08.28 集合堆栈机(模拟+STL)

    描述 中学数学里集合的元素往往是具体的数字,比如A = {1,2,3},B = {}(空集)等等.但是要特别注意,集合的元素也可以是另一个集合,比如说C = {{}},即说明C有且仅有一个元素--空集 ...

  3. 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历

    二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历   二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则 ...

  4. PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)

    1080 Graduate Admission (30 分)   It is said that in 2011, there are about 100 graduate schools ready ...

  5. PAT 甲级 1014 Waiting in Line (30 分)(queue的使用,模拟题,有个大坑)

    1014 Waiting in Line (30 分)   Suppose a bank has N windows open for service. There is a yellow line ...

  6. 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历

    二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根 ...

  7. PAT 甲级 1064 Complete Binary Search Tree (30 分)(不会做,重点复习,模拟中序遍历)

    1064 Complete Binary Search Tree (30 分)   A Binary Search Tree (BST) is recursively defined as a bin ...

  8. PTA 07-图5 Saving James Bond - Hard Version (30分)

    07-图5 Saving James Bond - Hard Version   (30分) This time let us consider the situation in the movie ...

  9. 银行排队问题之单队列多窗口加VIP服务(30 分)

    银行排队问题之单队列多窗口加VIP服务(30 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选 ...

随机推荐

  1. Jquery分享插件

    效果图如下: 代码如下: <!DOCTYPE HTML> <html style="padding-bottom: 54px;"> <head> ...

  2. webStorm 快捷键 + 浏览器

    webStorm 快捷键 shift + enter  不管光标在哪个位置 新建一行 Ctrl + G          查找行Ctrl + B          查找函数Ctrl + D      ...

  3. 【sqli-labs】Less1~Less4

    学习sql注入啦,一下都是我做sqli-labs时的笔记.可能有错误,如果有人发现了欢迎指正~~ 常用知识点: 1.mysql注释有三种:① #: 注释从#到行尾 ② --空格: 注释到行尾,注意-- ...

  4. Brup Suite 渗透测试笔记(七)

    继续接上次笔记: 1.Burp Intruder的payload类型的子模块(Character blocks)使用一种给出的输入字符,根据指定的设置产生指定大小的字符块,表现形式为生成指定长度的字符 ...

  5. poj2728 生成树01分数规划 (二分答案)

    给定整数序列a,b,求出下式的最大值 sum{ai*xi}/sum{bi*xi},xi=0|1 通俗来说,就是选出一些整数对(ai,bi),使得选出的a之和与选出的b之和商最大化 二分答案L,即选出的 ...

  6. mybatis-查询过程

    基本的查询过程: sqlsession--->executor---->statementhandler---->statement----->db InputStream r ...

  7. Python操作MySQL案例

    最近都在学习Python代码,希望学会Python后,能给我带来更高的工作效率,所以每天坚持学习和拷代码,下面是一个Python操作MySQL的一个实例,该实例可以让更多的人更好了解MySQLdb模块 ...

  8. python字符编码和文件处理

    一.了解字符编码的知识储备 1.文本编辑器存取文件的原理(nodepad++,python,word) 打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放于内存中的,断 ...

  9. bat 获取拖放文件路径或名称

    获取路径: @echo offset path=%~dp1echo %path%pause 获取路径及名称: @echo offset path=%~dp1%~nx1echo %path%pause

  10. AI-CBV写法

    AI-CBV写法 CBV固定样式 #url.py from django.conf.urls import url from django.contrib import admin from app0 ...