正题

题目链接:
https://www.luogu.org/problemnew/show/P1801


大意

有两种操作,
1.将一个数放入黑匣子中
2.++i之后查询第i小的数(初始为i)


解题思路

维护两个堆,一个是比第i小的数大的数的最小堆,一个是比一个是比第i+1小的数小的数的最大堆,插入一个数时,若他比第二个堆的堆顶小就将第二个堆的堆顶放入第一个堆,然后将那个数放入第二个堆,不然就直接放入第一个堆,输出就直接输出第一个堆的堆顶。


代码

#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,num,num2,a[200001],b[200001];
int u[200001],number[200001];
void up1(int x)
{while (x>1 && a[x/2]>a[x]){swap(a[x/2],a[x]);x/=2;}
}//维护堆1
void down1(int x)
{int y;while (x*2<=num && a[x*2]<a[x] || x*2+1<=num && a[x*2+1]<a[x]){y=x*2;if (y+1<=num && a[y]>a[y+1]) y++;swap(a[y],a[x]);x=y;}
}//维护堆1
void up2(int x)
{while (x>1 && b[x/2]<b[x]){swap(b[x/2],b[x]);x/=2;}
}//维护堆2
void down2(int x)
{int y;while (x*2<=num2 && b[x*2]>b[x] || x*2+1<=num2 && b[x*2+1]>b[x]){y=x*2;if (y+1<=num2 && b[y]<b[y+1]) y++;swap(b[y],b[x]);x=y;}
}//维护堆2
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)scanf("%d",&number[i]);for (int i=1;i<=m;i++)scanf("%d",&u[i]);for (int i=1,j=1;i<=m;i++){for (;j<=u[i];j++)//插入数{if (number[j]<b[1]){int z=b[1];b[1]=number[j];down2(1);a[++num]=z;up1(num);}else{a[++num]=number[j];up1(num);}}printf("%d\n",a[1]);//输出b[++num2]=a[1];//去掉该数up2(num2);swap(a[1],a[num]);num--;down1(1);}
}

P1801-黑匣子_NOI导刊2010提高【堆】相关推荐

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

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

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

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

  3. P1799 数列_NOI导刊2010提高(06)

    P1799 数列_NOI导刊2010提高(06) f[i][j]表示前i个数删去j个数得到的最大价值. if(i-j==x) f[i][j]=max(f[i][j],f[i-1][j]+1); els ...

  4. 方程的解_NOI导刊2010提高(01) 组合数

    题目描述 佳佳碰到了一个难题,请你来帮忙解决. 对于不定方程a1+a2+-+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数), ...

  5. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)

    P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000- 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...

  6. 洛谷P1807 最长路_NOI导刊2010提高(07) 求有向无环图的 最长路 图论

    洛谷P1807 最长路_NOI导刊2010提高(07) 图论 求有向无环图的 最长路 首先阐明一点 最长路dijkstra 是不能做 (当然我是不会做的,不过我貌似看到过网上的dalao有用dijst ...

  7. 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)

    P1796 汤姆斯的天堂梦_NOI导刊2010提高(05) 题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的 ...

  8. 洛谷——P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵(斐波那契数列)...

    P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵 斐波那契数列 1.x,y∈[1-k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满 ...

  9. 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)

    P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...

最新文章

  1. HTTP中request请求参数的设置
  2. SEO十心要诀 细节决定成败
  3. C#中访问私有成员技巧
  4. FFMPEG基于内存的转码实例——输入输出视频均在内存
  5. OpenStack Glance(镜像服务)基础架构:Basic architecture
  6. Extjs基础入门视频教程
  7. POS、银联密钥体系
  8. WAF是什么?一篇文章带你全面了解WAF
  9. 重磅发布《2020年中国乳制品行业数据中台研究报告》
  10. 【写论文用到的几个偷懒的网站和软件】
  11. HCIE必经之路(五)——OSPF综合实验(STUB及NSSA)
  12. 也许有一天,你发觉日子特别的艰难,那可能是这次的收获将特别的巨大
  13. 哪种服务器可以承载无限人数,云计算:揭秘1U服务器无限扩充能力
  14. postgresql 11.2 下载
  15. ISA(MIPS,ARM,RISC-V)中的算术运算溢出检测逻辑是怎样的?
  16. NAR | 深圳先进院马迎飞组发布底盘噬菌体的高通量制备方法
  17. mysql占用多少内存_解决mySQL占用内存超大问题
  18. Android字体资源
  19. 2015年3月13日
  20. 测试面试常用面试套题

热门文章

  1. 昆明学院计算机二级报名时间,2017年3月昆明学院计算机等级考试报名时间(云南)...
  2. 四川中级职称计算机考试考b级,四川省职称计算机B级考试1卷
  3. leetcode279. 完全平方数
  4. 跨越跨域大山,前端不得不知道的Ajax
  5. Bridge(桥接)--对象结构模式
  6. 数据结构与算法-- 八皇后问题(多种实现方案)
  7. diff git 指定时间,git diff日期?
  8. 树,森林,二叉树的互相转换
  9. 蓝桥杯 递增三元组 二分
  10. Mac(OS X)安装、配置并使用MySQL数据库