求救
查看原帖
求救
694866
grass_dream楼主2024/8/13 22:55
#include<iostream>
using namespace std; 
const int maxn=1000001;
struct tree{
	int val,n1,n2,siz,cnt;
};
tree a[maxn];
int tot;
void cr(int u,int w){
	if(tot==0){
		a[++tot].val=w;
		a[tot].siz=a[tot].cnt=1;
		return;
	}
	a[u].siz++;
	if(w==a[u].val){
		a[u].cnt++;
		return;
	}
	if(w<a[u].val){
		if(a[u].n1!=0)cr(a[u].n1,w);
		else{
			a[++tot].val=w;
			a[tot].cnt=a[tot].siz=1;
			a[u].n1=tot;
		}
		return;
	}
	else
	{
		if(a[u].n2!=0)cr(a[u].n2,w);
		else{
			a[++tot].val=w;
			a[tot].cnt=a[tot].siz=1;
			a[u].n2=tot;
		}
		return;
	}
} 
int cz(int u,int k){
	if(u==0)return -2147483647;
	int lsz=a[a[u].n1].siz;
	if(lsz>=k)return cz(a[u].n1,k);
	if(lsz+a[u].cnt<k)return cz(a[u].n2,k-lsz-a[u].cnt);
	return a[u].val;
}
int pm(int u,int w){
	if(u==0)return 1;
	int lsz=a[a[u].n1].siz;
	if(a[u].val==w)return lsz+1;
	if(a[u].val>w)return pm(a[u].n1,w);
	return pm(a[u].n2,w)+lsz+a[u].cnt;
}
long long pp[maxn];
int main(){
	int n,m,pre=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>pp[i];
	}
	for(int i=1;i<=m;i++){
		int x;
		cin>>x;
		for(int i=pre+1;i<=x;i++)cr(1,pp[i]);
		pre=x;
		cout<<cz(1,i)<<endl;
	}
	return 0;
}

评测记录

2024/8/13 22:55
加载中...