2017北大信科计算机机试G
2017-07-15 22:07
246 查看
题目:点击打开链接
提交
统计
提示
提问
总时间限制: 3000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB
描述
定义一个数组,初始化为空。在数组上执行两种操作:
1、增添1个元素,把1个新的元素放入数组。
2、输出并删除数组中最小的数。
使用堆结构实现上述功能的高效算法。
输入第一行输入一个整数n,代表操作的次数。
每次操作首先输入一个整数type。
当type=1,增添操作,接着输入一个整数u,代表要插入的元素。
当type=2,输出删除操作,输出并删除数组中最小的元素。
1<=n<=100000。
输出每次删除操作输出被删除的数字。
样例输入
样例输出
提示每组测试数据的复杂度为O(nlogn)的算法才能通过本次,否则会返回TLE(超时)
需要使用最小堆结构来实现本题的算法
分析:
节约时间可以使用stl中提供的堆算法,另外机试时数据可能比较弱,使用set,map,优先队列,sort等也不会超时
代码:
4078:实现堆结构
查看提交
统计
提示
提问
总时间限制: 3000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB
描述
定义一个数组,初始化为空。在数组上执行两种操作:
1、增添1个元素,把1个新的元素放入数组。
2、输出并删除数组中最小的数。
使用堆结构实现上述功能的高效算法。
输入第一行输入一个整数n,代表操作的次数。
每次操作首先输入一个整数type。
当type=1,增添操作,接着输入一个整数u,代表要插入的元素。
当type=2,输出删除操作,输出并删除数组中最小的元素。
1<=n<=100000。
输出每次删除操作输出被删除的数字。
样例输入
4 1 5 1 1 1 7 2
样例输出
1
提示每组测试数据的复杂度为O(nlogn)的算法才能通过本次,否则会返回TLE(超时)
需要使用最小堆结构来实现本题的算法
分析:
节约时间可以使用stl中提供的堆算法,另外机试时数据可能比较弱,使用set,map,优先队列,sort等也不会超时
代码:
#include<cstdio> #include<vector> #include<algorithm> using namespace std; vector<int> heap; bool cmp(int x, int y){return x > y;} int main(){ int n,op,num; scanf("%d",&n); make_heap(heap.begin(),heap.end(),cmp); while(n--){ scanf("%d",&op); if(op == 1){ scanf("%d",&num); heap.push_back(num); push_heap(heap.begin(),heap.end(),cmp); }else{ pop_heap(heap.begin(),heap.end(),cmp); printf("%d\n",heap.back()); heap.pop_back(); } } return 0; }
相关文章推荐
- 2017北大信科夏令营机试B
- 2017北大信科夏令营机试E:怪盗基德的滑翔翼
- 2017北大信科机试C
- 2017北大信科保研机试E
- 2017北大信科夏令营机试C:岛屿面积
- 2017北大信科夏令营机试A:判决素数个数
- 2017渤海银行----计算机笔试试题分享
- 2009年清华大学计算机研究生机试真题
- 2010年上海交通大学计算机研究生机试真题
- 九度OJ 1107 搬水果 -- 哈夫曼树 2011年吉林大学计算机研究生机试真题
- 火星A+B 2006年浙江大学计算机及软件工程研究生机试真题
- 题目1024:畅通工程 2007年浙江大学计算机及软件工程研究生机试真题
- A+B for Matrices(2011年浙江大学计算机及软件工程研究生机试真题)
- 2009年北京航空航天大学计算机研究生机试真题,迭代求立方根
- [深度学习与计算机视觉] 斯坦福 CS231n 2017 学习笔记 -1 (Lecture 1: Introduction;课程介绍)
- 2000年清华大学计算机研究生机试真题
- 【九度】2014年王道论坛计算机考研机试全真模拟考试解题报告
- 题目1201:二叉排序树(2005年华中科技大学计算机保研机试真题)
- 题目1083:特殊乘法(2010年清华大学计算机研究生机试真题)
- 题目1047:素数判定(2009年哈尔滨工业大学计算机研究生机试真题)