题意

题目链接

题解

这道题本可以用Treap暴力求解出来,但是不够优雅,因为没有充分利用到题目中给的条件,那就是要求的ithithith小的值的iii是单调递增的。

我们用两个堆来维护,大顶堆和小顶堆。
大顶堆中的元素是排好序的前i−1" role="presentation" style="position: relative;">i−1i−1i-1个,小顶堆里的元素个数是排好序的后n−i+1n−i+1n-i+1个。
这样每次询问的时候,我们只需要输出小顶堆中的最小的元素就ok了。
下面看怎么维护这两个堆。
一开始所有的元素都往小顶堆里面插入。
当i由1变成2的时候,我们把小顶堆里的最小值扔到大顶堆里面去,始终保持大顶堆里的元素个数是i−1i−1i-1。
如果插入一个元素比大顶堆里最大的元素还要大(或者相等),就把这个元素扔到小顶堆里面。否则扔到大顶堆里面,并且把大顶堆里面最大的元素扔到小顶堆里面去。
这就是维护过程。

代码

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
const int maxn = 1e6;
int a[maxn],mark[maxn];
int n,m;
int main(){scanf("%d%d",&m,&n);for(int i = 1;i <= m;++i)scanf("%d",&a[i]);for(int i = 0;i < n;++i){int tmp;scanf("%d",&tmp);mark[tmp]++;}priority_queue<int> Q1;priority_queue<int,vector<int>,greater<int> >Q2;int cut = 0;for(int i = 1;i <= m;++i){if(Q1.empty() || a[i] >= Q1.top())Q2.push(a[i]);else{Q1.push(a[i]);Q2.push(Q1.top());Q1.pop();}for(int j = 0;j < mark[i];++j){printf("%d\n",Q2.top());Q1.push(Q2.top());Q2.pop();}}return 0;
}

洛谷P1801 黑匣子 双堆套路的使用相关推荐

  1. 洛谷 [P1801] 黑匣子

    这道题是一道splay裸题,然而身为蒟蒻的我并不会,所以这道题我维护的是一个大根堆与一个小根堆结合起来的类似沙漏的结构. 本题难点在于询问的不是最大最小值,而是第K小值,所以我们想到了维护这样两个堆, ...

  2. 洛谷P1801 黑匣子

    题目描述 Black Box 是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量 ii.最开始的时候 Black Box 是空的.而 i=0i=0.这个 Black Box 要处理一串命令 ...

  3. 题解【黑匣子_NOI导刊2010提高(06)】(洛谷P1801)

    题目大意 给出一个长度为\(M\)序列\(A\),表示第\(i\)回合将\(A_i\)放入一个箱子中(共有\(M\)回合),再给出一个长度为\(N\)序列\(B\),表示在\(B_i\)回合执行一次\ ...

  4. 【洛谷 P7106】 双生独白

    最近没打什么题 有点慌 ,所以过来睡了睡月赛的前几题... 解题思路 水水就过了... 代码 #include<iostream> #include<cstdio> using ...

  5. 洛谷P2085ssl1411OJ1370-最小函数值【堆,贪心】

    前言 有一个东西卡了我一会 折叠N*或N+ 正整数集 (由全体正整数组成的集合) N*:={1,2,3,-,n,-} 题目 洛谷P2085 OJ1370 给出n个ai,bi,ci.定义一个函数 fi( ...

  6. 洛谷 P3378 【模板】堆

    2019-05-30 题目 : 洛谷 P3378 [模板]堆 : https://www.luogu.org/problemnew/show/P3378 题目描述 如题,初始小根堆为空,我们需要支持以 ...

  7. 升序堆和降序堆(优先队列) 洛谷1801

    1 // 洛谷1801 2 // 一个升序堆,一个降序堆 3 // 降序堆维护序列的前i个最小值 4 // 插如元素的时候,如果x小于降序堆最大值,则替换,并将最大值插入升序堆:否则,直接插入升序堆 ...

  8. 洛谷:P2832 行路难(堆优化Dijkstra(错解)bfs(正解) + 记录路径)

    洛谷:P2832 行路难 写这道题确实是行路难- 此题的最短路约束不只是边权,还有边数(每经过一条边,之后经过的边权值都 +1+1+1 ) 从期望的角度分析,我们肯定是想 尽可能走的路程越短,走得路径 ...

  9. 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess

    洛谷 P4363 [九省联考2018]一双木棋chess 题目大意 ◇题目传送门◆ 分析 根据题目所给定的规则,可以发现对于每一行,其下面一行上放的棋子数目不可能多于上面的一行. 所以我们可以将每行上 ...

最新文章

  1. ​MMIT冠军方案 | 用于行为识别的时间交错网络,商汤公开视频理解代码库
  2. nod32用户名和密码每天更新_忘记登录密码没有U盘怎么办?无U盘重置密码Win7篇
  3. 技术干货 | 基于 Doris 构建的小程序私域流量增长
  4. 大鱼吃光小鱼,绝不可能!盘点2016存储行业发生的大事件
  5. 新闻发布项目——业务逻辑层(UserService)
  6. android studio有错误,清单合并失败,Android Studio中出现多个错误
  7. 如何提升软件开发效能?企业级业务架构思考与实践
  8. Redis下载与安装 Linux + Windows 较详细步骤
  9. 服务器上运行python
  10. deepin安装 oracle_deepin 安装oracle12c过程
  11. 计算机网路课程设计——电子邮件客户端的设计与实现——接收邮件(POP3协议)
  12. zigbee PRO 事件
  13. wep加密方式是什么_什么是WEP(有线等效保密)?
  14. SAS PROC FORMAT
  15. 会员管理系统有哪些功能?
  16. ls200_铁三角 LS200 双动铁入耳式耳机 个人客观听感(附IM02听感对比)
  17. 网易2018校招数据分析师笔试答案作答
  18. ORACLE 掐头去尾截取中间字符串
  19. 会员营销中,沉寂会员的三种运营策略
  20. gulp.spritesmith gulp插件

热门文章

  1. python 廖雪峰数据分析统计服_廖雪峰python教程阅读量统计
  2. java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能
  3. linux gcc出错,编译arm-linux-gcc出错
  4. 7-8 最优服务次序问题 (10 分)
  5. linux 从不兼容的指针类型,警告:从不兼容的指针类型初始化
  6. python语言中不用来定义函数的关键字_Python 语言中用来定义函数的关键字是
  7. [Java基础]字符缓冲流
  8. D-query SPOJ - DQUERY(主席树求区间中不同的数的个数)
  9. Almost Union-Find UVA - 11987(并查集的删除操作)
  10. 数据结构与算法--面试必问AVL树原理及实现