记录编号 |
29618 |
评测结果 |
AAAAAA |
题目名称 |
[POJ 1442] 黑盒子 |
最终得分 |
100 |
用户昵称 |
TBK |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.574 s |
提交时间 |
2011-10-25 09:29:17 |
内存使用 |
0.61 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
int a[30000],b,c,d,l,m,n,s=1,t,test,r[30001]={0},x[30000],y=0;
void add(int p,int q)
{
if (p==q)
{
if (a[s]>x[p])
{
test=a[s];
y++;
for (n=p+1;n<=y;n++)
{
t=x[n];
x[n]=test;
test=t;
}
}
else
{
test=x[p];
x[p]=a[s];
y++;
for (n=p+1;n<=y;n++)
{
t=x[n];
x[n]=test;
test=t;
}
}
}
else
{
if (a[s]>x[p])
{
if ((double)(p+q)/2==(p+q)/2) add((p+q)/2,q);
else add((p+q)/2+1,q);
}
else add(p/2,p);
}
}
int main(void)
{
freopen ("blackbox.in","r",stdin);
freopen ("blackbox.out","w",stdout);
scanf("%d %d",&b,&c);
for (d=0;d<b;d++) scanf("%d",&a[d]);
for (d=1;d<=c;d++) scanf("%d",&r[d]);
if (r[c]<b) b=r[c];
x[0]=a[0];
r[0]=1;
for (d=1;d<=c;d++)
{
for (l=0;l<r[d]-r[d-1];l++)
{
add(0,y);
s++;
}
printf("%d\n",x[d-1]);
}
fclose(stdin);
fclose(stdout);
return 0;
}