黑匣子_NOI导刊2010提高(06),洛谷之提高历练地,堆

原创 2018年04月16日 10:48:07

正题

      这题在维护第i大的值上运用了巧妙的方法。

      第一题:黑匣子_NOI导刊2010提高(06)

      我们用一个大根堆和一个小根堆来分别维护前i小的和剩余的,那么答案很明显,就是当前拥有前i小元素的大根堆的堆顶。我们每次把新的元素加入小跟堆,然后让大根堆和小根堆互换相斥元素。(就是小的往大根堆跑,大的往小跟堆跑)

代码<注意操作>

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;

priority_queue<int> h1;
priority_queue<int , vector<int> , greater<int> > h2;
int m,n; 
int b[200010];
int a[200010];

int main(){
	scanf("%d %d",&m,&n);
	for(int i=1;i<=m;i++) scanf("%d",&b[i]);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	int now=1;
	int kk=0;
	for(int i=1;i<=m;i++){
		h2.push(b[i]);
		while(a[now]==i){
			h1.push(h2.top());
			h2.pop();
			while(h1.top()>h2.top() && !h1.empty() && !h2.empty()){
				int t1=h1.top(),t2=h2.top();
				h1.pop();h2.pop();
				h1.push(t2),h2.push(t1);
			}
			printf("%d\n",h1.top());
			now++;
		}
	}
}


版权声明: https://blog.csdn.net/Deep_Kevin/article/details/79957569

洛谷1801 黑匣子_NOI导刊2010提高(06) 【好题】

洛谷1801 黑匣子_NOI导刊2010提高(06) 本题地址: http://www.luogu.org/problem/show?pid=1801题目描述 Black Box是一种原始的数据库...
  • huzujun
  • huzujun
  • 2015-10-28 16:11:13
  • 1065

洛谷 P1801 黑匣子_NOI导刊2010提高(06)

  • Rlt1296
  • Rlt1296
  • 2016-08-12 00:30:38
  • 346

黑匣子_NOI导刊2010提高(06)(对顶堆)

QAQ 要查询第k大的值,维护一个大根堆和一个小根堆,他们的队首元素一样,也就是说小根堆里的元素都比大根堆里的大。维护大根堆里有k个元素那么下次找答案时只需要输出小根堆的优先元素即可,然后再将小根堆...
  • qq_35914587
  • qq_35914587
  • 2017-03-17 16:03:24
  • 327

luogu P1801 黑匣子_NOI导刊2010提高(06)

题目传送门:https://www.luogu.org/problemnew/show/P1801#sub题意:有n个数依次读入,在第x个数被读入后会有一个输出操作,表示输出当前数列第i大的数,然后i...
  • zsyz_ZZY
  • zsyz_ZZY
  • 2018-04-16 08:34:21
  • 9

刷题记录-luoguP1801 黑匣子_NOI导刊2010提高(06)

本题主要就是找第k小的数 可以建一棵二叉搜索树,设节点左子树的个数为size,则有: 如果k==size+1,那么显然这个节点就是第k小的数 如果k 如果k>size+1,那么k肯定在右子树中...
  • w_h_h_
  • w_h_h_
  • 2017-07-12 22:45:20
  • 85

LUOGUP1801 黑匣子_NOI导刊2010提高(06)

堆排
  • superdata999
  • superdata999
  • 2017-12-15 00:59:21
  • 66

洛谷 P1801 [NOI导刊2010提高(06)] 黑匣子

优先队列(堆?)
  • SenyeLicone
  • SenyeLicone
  • 2016-08-13 20:34:10
  • 476

SuperGCD,洛谷之提高历练地,数论(3-5)

前话      数论就是研究整数的理论。包括公约公倍数、质数、欧拉定理和同余方程等。正文       其实数论不止那么简单正文      第一题:SuperGCD      这一题就是很烦的代码加很烦...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-07 17:19:43
  • 11

[SDOI2009]E&D,洛谷之提高历练地,博弈论(3-6)

正题      第四题:[SDOI2009]E&amp;amp;D      这题不是如此的简单,因为它要涉及到找规律和Sg函数。      首先的,我们可以打一个表来观察之间的关系。      Sg...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-08 13:48:45
  • 13

NOI导刊游记

现在的时间是:2016年2月10日01:03:10。正好是大年初三,我就随便写写吧…不知道为什么,以前从来没有想过写什么游记什么的,但有了博客就是想写…………虽然没人看吧2333去导刊的时间是1.28...
  • LOI_DQS
  • LOI_DQS
  • 2016-02-10 03:02:31
  • 1488
收藏助手
不良信息举报
您举报文章:黑匣子_NOI导刊2010提高(06),洛谷之提高历练地,堆
举报原因:
原因补充:

(最多只允许输入30个字)