比赛 树形数据结构拔高 评测结果 WWWWWWWWWWWWWWWWWWWW
题目名称 滑稽♂树 最终得分 0
用户昵称 Ruyi 运行时间 1.588 s
代码语言 C++ 内存使用 4.58 MiB
提交时间 2025-04-17 20:45:24
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
	int num;
	vector<int> v;
}d[30001];
int n,q,u,v,c[30001],k,a,b,x,s,cnt,op;
void f(int rt){
	c[++cnt]=d[rt].num;
	s=d[rt].v.size();
	if(s!=0) for(int i=0;i<s;i++) f(d[rt].v[i]);
}
int main(){
	freopen("hjtree.in","r",stdin);
	freopen("hjtree.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>d[i].num;
	for(int i=1;i<n;i++){
		cin>>u>>v;
		d[u].v.push_back(v);
	}
	cin>>q;
	while(q--){
		cin>>op>>u;
		if(op==1){
			cin>>k;
			cnt=0;
			f(u);
			sort(c+1,c+cnt+1);
			cout<<c[k]<<endl;
		}else if(op==2){
			cin>>a>>b;
			cnt=0;
			f(u);
			sort(c+1,c+cnt+1);
			bool flag=true;
			for(int i=1;i<=cnt;i++){
				if(flag&&c[i]>=a){
					flag=false;
					a=i;
				}
				if(c[i]>b){
					b=i;
					break;
				}
				if(i==cnt){
					b=cnt+1;
					if(flag) a=cnt+1;
				}
			}
			cout<<b-a<<endl;
		}else{
			cin>>x;
			d[u].num=x;
		}
	}
	return 0;
}