题目描写叙述 Description

我们使用黑匣子的一个简单模型。它能存放一个整数序列和一个特别的变量i。在初始时刻。黑匣子为空且i等于0。

这个黑匣子能运行一系列的命令。有两类命令:

ADD(x):把元素x放入黑匣子。GET:把i加1的同一时候,输出黑匣子内全部整数中第i小的数。牢记第i小的数是当黑匣子中的元素已非降序排序后位于第i位的元素。

以下的表6_4是一个11个命令的样例:

表6_4

编号

命令

i

黑匣子内容

输出

1

ADD(3)

0

3

2

GET

1

3

3

3

ADD(1)

1

1,3

4

GET

2

1,3

3

5

ADD(-4)

2

-4,1,3

6

ADD(2)

2

-4,1,2,3

7

ADD(8)

2

-4,1,2,3,8

8

ADD(-1000)

2

-1000,-4,1,2,3,8

9

GET

3

-1000,-4,1,2,3,8

1

10

GET

4

-1000,-4,1,2,3,8

2

11

ADD(2)

4

-1000,-4,1,2,2,3,8

现须要一个有效的算法处理给定的一系列命令。

ADD和GET命令的总数至多个有30000个。定义ADD命令的个数为M个。GET命令的个数为N个。

我们用以下得两个整数序列描写叙述命令序列:

1.A(1),A(2),……,A(M):增加黑匣子的元素序列。全部的数均为绝对值不超过2000000的整数。

比如在上例中A=(3,1,-4,2,8,-1000,2)。

2.u(1),u(2),……,u(N):u(i)表示第i个GET命令在第u(i)个ADD命令之后,比如在上例中,u=(1,2,6,6)。

你能够假定自然数序列u(1),u(2),……,u(N)以非降序排列。N≤M,且对于每个p(1≤p≤N)有p≤u(p)≤M。

输入描写叙述 Input Description

第一行存放M和N的值,第二行存放 A(1),A(2),……,A(M) ,第三行存放u(1),u(2),……,u(N)。

输出描写叙述 Output Description

输出黑匣子的处理结果。

例子输入 Sample Input

7 4

3 1 -4 2 8 -1000 2

1 2 6 6

例子输出 Sample Output

3

3

1

2

刚開始并不知道这题该怎样下手。知道是堆做了。

可是详细也不知道怎么做。

看了这第二个解题报告了才知道怎样做:http://www.wikioi.com/solution/list/2573/(第二个解题报告,思想非常好)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<bitset>
#define INF 100007
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
priority_queue<int,vector<int>,greater<int> >heap_small;
priority_queue<int>heap_big;
int a[30005],b[30005];
int main()
{
int n,k,i,j,ii=0,jj=-1;
cin>>n>>k;
for(i=1; i<=n; i++)
scanf("%d",a+i);
for(i=0; i<k; i++)
scanf("%d",b+i);
for(i=1; i<=n; i++)
{
if(jj<ii) heap_big.push(a[i]),jj++;
else
{
int ans=heap_big.top();
if(a[i]>=ans) heap_small.push(a[i]);
else
{
heap_big.pop();
heap_small.push(ans);
heap_big.push(a[i]);
}
}
while(i==b[jj])
{
printf("%d\n",heap_big.top());
ii++;
if(jj+1<k&&i==b[jj+1])
{
int ans=heap_small.top();
heap_small.pop();
heap_big.push(ans);
jj++;
}
else break;
}
if(ii>=k) break;
}
return 0;
}

wikioi 2573 大顶堆与小顶堆并用的更多相关文章

  1. 堆排序(大顶堆、小顶堆)----C语言

    堆排序 之前的随笔写了栈(顺序栈.链式栈).队列(循环队列.链式队列).链表.二叉树,这次随笔来写堆 1.什么是堆? 堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被 ...

  2. heap c++ 操作 大顶堆、小顶堆

    在C++中,虽然堆不像 vector, set 之类的有已经实现的数据结构,但是在 algorithm.h 中实现了一些相关的模板函数.下面是一些示例应用 http://www.cplusplus.c ...

  3. 《排序算法》——堆排序(大顶堆,小顶堆,Java)

    十大算法之堆排序: 堆的定义例如以下: n个元素的序列{k0,k1,...,ki,-,k(n-1)}当且仅当满足下关系时,称之为堆. " ki<=k2i,ki<=k2i+1;或k ...

  4. 大顶堆与小顶堆应用---寻找前k小数

    vector<int> getLeastNumber(vector<int>& arr,int k){ vector<int> vec(k,); if(== ...

  5. 378. Kth Smallest Element in a Sorted Matrix(大顶堆、小顶堆)

    Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...

  6. 数据结构:堆排序 (python版) 小顶堆实现从大到小排序 | 大顶堆实现从小到大排序

    #!/usr/bin/env python # -*- coding:utf-8 -*- ''' Author: Minion-Xu 小堆序实现从大到小排序,大堆序实现从小到大排序 重点的地方:小堆序 ...

  7. Python使用heapq实现小顶堆(TopK大)、大顶堆(BtmK小)

    Python使用heapq实现小顶堆(TopK大).大顶堆(BtmK小) | 四号程序员 Python使用heapq实现小顶堆(TopK大).大顶堆(BtmK小) 4 Replies 需1求:给出N长 ...

  8. 剑指offer:数据流中的中位数(小顶堆+大顶堆)

    1. 题目描述 /** 如何得到一个数据流中的中位数? 如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值. 如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两 ...

  9. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

随机推荐

  1. Android 进程和文件的UID/GID

    一.文件的操作权限和UID,GID以及进程的UID,GID 1. 文件资源的权限力度:UID/GID 2. 文件的可操作权限 3. 进程的标识: PID, UID, GID, GIDs 二.UID,G ...

  2. python【第十五篇】JavaScript

    大纲 1 简介 2 存在形式 3 放置位置 4 变量 5 注释 6 数据类型 7 时间处理 8 语句和异常 9 函数及其作用域 1.JS简介 JavaScript是世界上最流行的脚本语言,因为你在电脑 ...

  3. ”ENV_IS_EMBEDDED“解惑以及相关的移植实验

    一.概述( ENV_IS_EMBEDDED的目的) 经典资料 认识     ENV_IS_EMBEDDED只有在CFG_ENV_IS_IN_FLASH或者CFG_ENV_IS_IN_NAND定义了才有 ...

  4. Objective-C的反射

          我第一次接触Java的时候就觉得整个反射包都很新颖,它使得Java和解释型的脚本语言更接近了,与此同时也拉开了和主流的C和C++的距离.在运行时可以窥视到一个对象的类元数据真的很不可思议, ...

  5. 2016最新Java笔试题集锦

    更新时间:2015-08-13         来源:网络         投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...

  6. 区分html与css中的属性

    CSS中id与Class的区别 1.在CSS文件里书写时,ID加前缀"#":CLASS用"." 2.id一个页面只可以使用一次:class可以多次引用. 3.I ...

  7. hexo 适合前端 geek 的博客

    原文出自:http://www.qiangji.tk/hexo%E9%80%82%E5%90%88%E5%89%8D%E7%AB%AFgeek%E7%9A%84%E5%8D%9A%E5%AE%A2/ ...

  8. Java学习IO篇

            来吧,同志们,为复习网络编程做准备-- 一.理论准备         流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流" ...

  9. iOS9 App Thinning(应用瘦身)功能介绍

    iOS9 发布后,产生了一个使 App Thinning 无法正常运行的 bug.在iOS9.0.2 版本中,这个 bug 已经被修复,App Thinning 已经可以正常使用.当你从应用商店(Ap ...

  10. Solr总结

    http://www.cnblogs.com/guozk/p/3498831.html Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注 ...