直接递归RE...原因是不是爆栈)
查看原帖
直接递归RE...原因是不是爆栈)
1403747
Madokaaa楼主2024/10/13 20:44
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<float.h>
#include<ctype.h> 
#define LL long long
int m,q;
int ANS[100000+2];
typedef struct{
	char cmptype;
	int t,left,right;
}Node;
int ns;
Node node[100000+2];
int build(char head)
{
	char ch=head;
	int d=0,i=++ns;
	if(ch=='x'){
		node[i].cmptype=getchar();
		ch=getchar();
		while(isdigit(ch))d*=10,d+=ch-'0',ch=getchar();
		node[i].t=d;
		node[i].left=build(getchar());
		node[i].right=build(getchar());
	}else{
		while(isdigit(ch))d*=10,d+=ch-'0',ch=getchar();
		node[i].t=d;
	}
	return i;
}
int traverse(int x,int i)
{
	switch(node[i].cmptype){
		case 0:{return node[i].t;}
		case '<':{
			if(x<node[i].t)return traverse(x,node[i].left);
			else return traverse(x,node[i].right);
		}
		case '>':{
			if(x>node[i].t)return traverse(x,node[i].left);
			else return traverse(x,node[i].right);
		}
	}
}
int ans(int x)
{
	if(!ANS[x])ANS[x]=traverse(x,1);
	return ANS[x];
}
int main()
{
	scanf("%d%d\n",&m,&q);
	build(getchar());
	int x;
	while(q--){
		scanf("%d",&x);
		printf("%d\n",x>m?ans(m+1):ans(x));
	}
	return 0;
}
2024/10/13 20:44
加载中...