poj1442(Black Box)

题目地址:Black Box

题目大意:

有一个黑盒子可以进行两种操作,一种是ADD往盒子里存数,一种是GET查找盒子里的第几个数,默认盒子里始终是从小到大排列,然后A(1)、A(2)....A(M)为要存进盒子的数,u(1)、u(2)、....u(N)的数并不是取出第几个数,而这里u(N)存的数是插入几个A(M)到盒子里去,这里有一个P(1 <= p <= N) 和u是同序列的。输出 p-minimum number from our A(1), A(2), ..., A(u(p)) sequence.  p从1开始到N ,p为多少输出第几小的数。

解题思路 :

首先每次循环用到sort超时。

代码:

 1 const int M=30005;
 2 int s2[M],s1[M],s3[M];
 3 int main()
 4 {
 5     int m,n;
 6     priority_queue<int >Q;
 7     while(scanf("%d%d",&m,&n)!=EOF)
 8     {
 9         memset(s1,0,sizeof(s1));
10         memset(s2,0,sizeof(s2));
11         int i,j,k;
12         for(i=1;i<=m;i++)
13             scanf("%d",&s1[i]);
14         int d=1;
15         int cnt=0;
16         for(i=1;i<=n;i++)
17         {
18             scanf("%d",&s2[i]);
19             for(j=d;j<=s2[i];j++)
20             {
21                 d=j+1;
22                 s3[++cnt]=s1[j];
23             }
24             sort(s3,s3+cnt+1);
25             printf("%d\n",s3[i]);
26         }
27     }
28     return 0;
29 }

sort最坏的时间复杂度是n*n,一般是nlog(n).所以每次循环用的很费时。

而优先队列的时间复杂度最坏log(n)。

首先用优先队列分别建立一个最小堆和一个最大堆,让最大堆始终存储前p小个数,所以最大堆的堆顶就是题目要求的get。最小堆始终存储剩余的数。关键是怎么往最大、和最小堆push。当p=1时。Q2为空,直接全都push最最小堆Q1里,最后将最小堆的堆顶Q1.top()传给最大推Q2。这时Q2里有一个数,当p=2时,需要push到Q1时每次比较如果有小于Q2.top(),然后将最大最小堆栈顶交换,最后再将最小堆的堆顶Q1.top()传给最大推Q2,以此类推. . .这样就保证了Q2始终存的是前P小个数。

代码:

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <sstream>
 4 #include <cstdlib>
 5 #include <cstring>
 6 #include <cstdio>
 7 #include <string>
 8 #include <bitset>
 9 #include <vector>
10 #include <queue>
11 #include <stack>
12 #include <cmath>
13 #include <list>
14 //#include <map>
15 #include <set>
16 using namespace std;
17 /***************************************/
18 #define ll long long
19 #define int64 __int64
20 /***************************************/
21 const int INF = 0x7f7f7f7f;
22 const double eps = 1e-8;
23 const double PIE=acos(-1.0);
24 const int d1x[]= {0,-1,0,1};
25 const int d1y[]= {-1,0,1,0};
26 const int d2x[]= {0,-1,0,1};
27 const int d2y[]= {1,0,-1,0};
28 const int fx[]= {-1,-1,-1,0,0,1,1,1};
29 const int fy[]= {-1,0,1,-1,1,-1,0,1};
30 /*vector <int>map[N];map[a].push_back(b);int len=map[v].size();*/
31 /***************************************/
32 void openfile()
33 {
34     freopen("data.in","rb",stdin);
35     freopen("data.out","wb",stdout);
36 }
37 priority_queue<int> qi1;
38 priority_queue<int, vector<int>, greater<int> >qi2;
39 /**********************华丽丽的分割线,以上为模板部分*****************/
40 const int M=30005;
41 int s1[M],s2[M];
42 int main()
43 {
44     int m,n;
45     priority_queue<int >Q2;
46     priority_queue<int ,vector<int>,greater<int> >Q1;
47     while(scanf("%d%d",&m,&n)!=EOF)
48     {
49         memset(s1,0,sizeof(s1));
50         memset(s2,0,sizeof(s2));
51         int i,j,k;
52         for(i=1;i<=m;i++)
53             scanf("%d",&s1[i]);
54         int d=1;
55         for(i=1;i<=n;i++)
56         {
57             scanf("%d",&s2[i]);
58             for(j=d;j<=s2[i];j++)
59             {
60                 d=j+1;
61                 Q1.push(s1[j]);
62                 if (!Q2.empty()&&Q1.top()<Q2.top())
63                 {
64                     int v1=Q1.top();
65                     int v2=Q2.top();
66                     Q1.pop();
67                     Q1.push(v2);
68                     Q2.pop();
69                     Q2.push(v1);
70                 }
71             }
72             int v=Q1.top();
73             Q2.push(v);
74             Q1.pop();
75             printf("%d\n",Q2.top());
76         }
77     }
78     return 0;
79 }

poj1442(Black Box),布布扣,bubuko.com

时间: 2024-10-22 21:43:58

poj1442(Black Box)的相关文章

CSS盒子模型之CSS3可伸缩框属性(Flexible Box)

CSS盒子模型(下) 一.CSS3可伸缩框(Flexible Box) 可伸缩框属性(Flexible Box)是css3新添加的盒子模型属性,有人称之为弹性盒模型,它的出现打破了我们经常使用的浮动布局,实现垂直等高.水平均分.按比例划分等分布方式以及如何处理可用的空间.使该模型,可以很轻松的创建自适应浏览器窗口的流动布局或自适应字体大小的弹性布局.但是它有一定的局限性,在firefox.chrome这浏览器下需要使用它们的私有属性来定义:firefox(-moz).chrome(-webkit

【CSS3】 之 弹性盒子(Flex Box)

Flex布局是什么 如何指定一个容器为Flex布局 Flex的基本语法 display flex-direction justify-content align-items flew-wrap align-self flex-flow flex order 示例 骰子的布局 圣杯的布局 参考文章 一, Flex布局是什么 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现.Flex布局

01 - 在虚拟机(Virtual Box)中安装Ubuntu 16.04

VirtualBox 是一款开源虚拟机软件,现在由甲骨文公司进行开发.我们可以在VirtualBox的官网进行下载安装,安装过程这里不做叙述.官网下载地址. Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于Debian GNU/Linux,支持x86.amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的.可以在Ubuntu的官网下载.这里我下载的是Ubuntu最新的长期支持版本Ubuntu 16.04.3LTS.官网

Spring MVC-表单(Form)标签-文本框(Text Box)示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_textbox.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如何使用Spring Web MVC框架在窗体中使用文本框.首先,让我们使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态窗体的Web应用程序: 步骤 描述 1 创建一个名为HelloWeb的项目,在一个包com.tutorialspoint下,如

(转载)VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

因为私人问题,鸡啄米暂停更新了几天,首先向关注鸡啄米动态的朋友说一声抱歉. 言归正传,鸡啄米上一节中讲了编辑框的用法,本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图.单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中状态具有互斥关系,即同组的单选按钮只能有

VS2010-MFC(常用控件:按钮控件Button、Radio Button和Check Box)

转自:http://www.jizhuomi.com/software/182.html 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图.单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中状态具有互斥关系,即同组的单选按钮只能有一个被选中. 命令按钮是我们最熟悉也是最常用的一种按钮控件,而单选按钮

python 学习笔记十二 CSS基础(进阶篇)

1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现分离的问题 外部样式表可以极大提高工作效率 外部样式表通常存储在 CSS 文件中 多个样式定义可层叠为一 css存在方式: 元素内联 页面嵌入 外部引入 语法:style = 'key1:value1;key2:value2;' 1.元素内联(在标签中使用css) <!--在标签使用--> &

CSS 可视化设计模型(1)块框(Block boxex)和 行内框(Inline boxes)

包含块(Cotaining Blocks) 在CSS2.1中,很多 box 的定位和大小都根据一个名为包含块 Containing Block 的矩形盒的边缘来计算.一般地,生成的 box 会充当其后代 box 的包含块:我们称盒为其后代"创建"了包含块.说"box的包含块"即是说"box所处的包含块",而不是box所产生的包含块. 每个box会被赋予一个相对于其包含块的位置,但它不会被局限在其包含块内:它有可能溢出. <div> &

【干货分享】前端面试知识点锦集02(CSS篇)——附答案

二.CSS部分 1.解释一下CSS的盒子模型? 回答一:a.标准的css盒子模型:宽度=内容的宽度+边框的宽度+加上内边具的宽度b.网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性.c.这些属性我们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以叫它盒子模式.CSS盒子模型就是在网页设计中经常用到的CSS技术所使用的一种思维模型.