P1801-黑匣子_NOI导刊2010提高【堆】
正题
题目链接:
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提高【堆】相关推荐
- P1801 黑匣子_NOI导刊2010提高(06)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- 题解【黑匣子_NOI导刊2010提高(06)】(洛谷P1801)
题目大意 给出一个长度为\(M\)序列\(A\),表示第\(i\)回合将\(A_i\)放入一个箱子中(共有\(M\)回合),再给出一个长度为\(N\)序列\(B\),表示在\(B_i\)回合执行一次\ ...
- 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 ...
- 方程的解_NOI导刊2010提高(01) 组合数
题目描述 佳佳碰到了一个难题,请你来帮忙解决. 对于不定方程a1+a2+-+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数), ...
- 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000- 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
- 洛谷P1807 最长路_NOI导刊2010提高(07) 求有向无环图的 最长路 图论
洛谷P1807 最长路_NOI导刊2010提高(07) 图论 求有向无环图的 最长路 首先阐明一点 最长路dijkstra 是不能做 (当然我是不会做的,不过我貌似看到过网上的dalao有用dijst ...
- 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)
P1796 汤姆斯的天堂梦_NOI导刊2010提高(05) 题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的 ...
- 洛谷——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,求一组满 ...
- 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)
P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...
最新文章
- HTTP中request请求参数的设置
- SEO十心要诀 细节决定成败
- C#中访问私有成员技巧
- FFMPEG基于内存的转码实例——输入输出视频均在内存
- OpenStack Glance(镜像服务)基础架构:Basic architecture
- Extjs基础入门视频教程
- POS、银联密钥体系
- WAF是什么?一篇文章带你全面了解WAF
- 重磅发布《2020年中国乳制品行业数据中台研究报告》
- 【写论文用到的几个偷懒的网站和软件】
- HCIE必经之路(五)——OSPF综合实验(STUB及NSSA)
- 也许有一天,你发觉日子特别的艰难,那可能是这次的收获将特别的巨大
- 哪种服务器可以承载无限人数,云计算:揭秘1U服务器无限扩充能力
- postgresql 11.2 下载
- ISA(MIPS,ARM,RISC-V)中的算术运算溢出检测逻辑是怎样的?
- NAR | 深圳先进院马迎飞组发布底盘噬菌体的高通量制备方法
- mysql占用多少内存_解决mySQL占用内存超大问题
- Android字体资源
- 2015年3月13日
- 测试面试常用面试套题