PAT A1057 Stack 二分写法

编程入门 行业动态 更新时间:2024-10-24 08:21:10

PAT A1057 Stack 二分<a href=https://www.elefans.com/category/jswz/34/1768693.html style=写法"/>

PAT A1057 Stack 二分写法

题目地址

这道题考的是优化, 肯定能拿分, 但是拿满分需要一点思考, 《算法笔记》上面用分块的方法来处理, 效率很高, 但是有点复杂, 分块也算是比较冷门的处理手段, 这道题用二分来做也可以, 而且很简单, 用空间换时间。

//我知道这道题可以分块思想来写 但是我忘了 并且我想到另外一种方法 二分法 还更简单 不过效率上面来说 比分块差很多
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int main(){int n;scanf("%d",&n);vector<int> vt1, vt2;int medianIndex=0;for (int i=0; i<n; i++){char oper[20];scanf("%s", oper);if (oper[1]=='o'){//popif (vt1.empty()){printf("Invalid\n");}else {int top=vt1[vt1.size()-1];printf("%d\n",top);vt1.pop_back();auto it=find(vt2.begin(), vt2.end(), top);vt2.erase(it);}}else if (oper[1]=='u'){//pushint key;scanf("%d",&key);vt1.push_back(key);auto it=upper_bound(vt2.begin(), vt2.end(), key);vt2.insert(it, key);
//			for (auto x:vt2){
//				printf("!!!%d   ",x);
//			}}else if (oper[1]=='e'){if (vt2.empty()){printf("Invalid\n");}else {printf("%d\n",vt2[(vt2.size()-1)/2]);}}}
}

用二分来写的话, 效率差很多, 只能勉强通过,哈哈哈哈, 但是二分法容易想到, 而且代码量很少。
ps: 这道题的数据里面有大量的重复元素, 所以二分的时候用 lower_bound比用upper_bound要快不少, 但是用upper_bound也能通过。

更多推荐

PAT A1057 Stack 二分写法

本文发布于:2024-02-17 14:56:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1694430.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:写法   PAT   Stack

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!