记录编号 428405 评测结果 AAAAAA
题目名称 [POJ 1442] 黑盒子 最终得分 100
用户昵称 GravatarFisher. 是否通过 通过
代码语言 C++ 运行时间 0.077 s
提交时间 2017-07-25 16:05:51 内存使用 1.11 MiB
显示代码纯文本
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <map>
using namespace std;
inline int in(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*f;
}
int n,m,k;
const int maxn=30010;
int sum[4*maxn];
map<int,int>pos;
int data[maxn];
int ha[maxn];
int cha[maxn];
inline void insert(int o,int l,int r,int nl,int nr){
	if(l>=nl&&r<=nr){
		sum[o]++;
		return ;
	}
	int m=(l+r)>>1,ls=o<<1,rs=ls+1;
	if(m>=nl)insert(ls,l,m,nl,nr);
	if(m<nr)insert(rs,m+1,r,nl,nr);
	sum[o]=sum[ls]+sum[rs];
}
inline int kth(int o,int l,int r,int rank){
	int m=(l+r)>>1,ls=o<<1,rs=ls+1;
	if(l==r)return l;
	if(rank<=sum[ls])return kth(ls,l,m,rank);
	if(rank>sum[ls])return kth(rs,m+1,r,rank-sum[ls]);
}
int main(){
	freopen("blackbox.in","r",stdin);
	freopen("blackbox.out","w",stdout);
	n=in();m=in();
	for(int i=1;i<=n;i++){
		data[i]=in();
		ha[i]=data[i];
	}
	for(int i=1;i<=m;i++){
		cha[i]=in();
	}
	sort(ha+1,ha+n+1);
	for(int i=1;i<=n;i++){
		if(pos[ha[i]])continue;
		pos[ha[i]]=i;
	}
	int c=1;
	for(int i=1;i<=n;i++){
		insert(1,1,30000,pos[data[i]],pos[data[i]]);
		while(i==cha[c]){
			k++;
			printf("%d\n",ha[kth(1,1,30000,k)]);
			c++;
		}
	}
	return 0;
}