#include<stdio.h>
#define MAXSIZE 50000
#define TRUE 1
#define FALSE 0
int Search(int *a
,int low
,int high
,int b
);
int main()
{
int n
;
int i
=0;
int a
[MAXSIZE
],b
[MAXSIZE
];
int m
,t
;
scanf("%d",&n
);
for(i
=0;i
<n
;i
++){
scanf("%d",&a
[i
]);
}
scanf("%d",&m
);
for(i
=0;i
<m
;i
++){
scanf("%d",&b
[i
]);
}
for(i
=0;i
<m
;i
++){
t
=Search(a
,0,n
-1,b
[i
]);
if(t
==TRUE
)printf("Yes\n");
else printf("No\n");
}
return 0;
}
int Search(int *a
,int low
,int high
,int b
)
{
int mid
;
if(low
<=high
){
mid
=(low
+high
)/2;
if(a
[mid
]==b
)return TRUE
;
if(a
[mid
]>b
)return Search(a
,low
,mid
-1,b
);
if(a
[mid
]<b
)return Search(a
,mid
+1,high
,b
);
}
else return FALSE
;
}
#include<iostream>
#define MAXN 10000
#define true 1
#define false 0
using namespace std
;
int n
;
int a
[MAXN
];
int m
;
int Merge(int *a
,int k
,int low
,int high
);
int main()
{
int i
,k
;
cin
>>n
;
for(i
=0;i
<n
;i
++){
cin
>>a
[i
];
}
cin
>>m
;
while(m
>0){
cin
>>k
;
if(Merge(a
,k
,0,n
-1))cout
<<"Yes"<<endl
;
else cout
<<"No"<<endl
;
m
--;
}
return 0;
}
int Merge(int *a
,int k
,int low
,int high
)
{
int mid
;
if(low
<=high
){
mid
=(low
+high
)/2;
if(a
[mid
]==k
)return true;
if(a
[mid
]<k
){
low
=mid
+1;
return Merge(a
,k
,low
,high
);
}
if(a
[mid
]>k
){
high
=mid
-1;
return Merge(a
,k
,low
,high
);
}
}
return false;
}
注意:这里的return 语句起到非常作用:接连递归。
转载请注明原文地址:https://blackberry.8miu.com/read-40053.html