Description
判断一些数字在一个数列中是否存在。
Input
第一行输入两个正整数m和n。
第二行m个数字表示这个数列。
第三行n个数字表示需要判断的数字。
Output
输出共一行n个0或1,0表示这个数字不存在,1表示存在。
Sample Input
2 2
2 4
2 5
Sample Output
1 0
HINT
输入数字保证不超过MaxInt。
有节操的人不用set
题解
二叉排序树可以A
#include<iostream> #include<cstdio> #define N 1000000 using namespace std; struct tree { int lch,rch; int val; }t[N]; int topt = 0; void add_tree(int &now,int val) { if (!now) { now = ++topt; t[now].val = val; return ; } if (val<t[now].val) add_tree(t[now].lch,val); else add_tree(t[now].rch,val); } bool find(int now,int val) { if (!now) return false; //先判断这个 if (val == t[now].val) return true; if (val < t[now].val) return find(t[now].lch,val); else return find(t[now].rch,val); } int main() { int n,m,val,root=0; scanf("%d%d",&m,&n); printf("\n"); for (int i=1;i<=m;i++) { scanf("%d",&val); add_tree(root,val); } for (int i=1;i<=n;i++) { scanf("%d",&val); printf("%d ",find(root,val)); } }