For a given sequence $A = \{a_0, a_1, ..., a_{n-1}\}$ which is sorted by ascending order, find a specific value $k$ given as a query.
Input
The input is given in the following format.
$n$ $a_0 \; a_1 \; ,..., \; a_{n-1}$ $q$ $k_1$ $k_2$ : $k_q$
The number of elements $n$ and each element $a_i$ are given in the first line and the second line respectively. In the third line, the number of queries $q$ is given and the following $q$ lines, $q$ integers $k_i$ are given as queries.
Output
For each query, print 1 if any element in $A$ is equivalent to $k$, and 0 otherwise.
Constraints
- $1 \leq n \leq 100,000$
- $1 \leq q \leq 200,000$
- $0 \leq a_0 \leq a_1 \leq ... \leq a_{n-1} \leq 1,000,000,000$
- $0 \leq k_i \leq 1,000,000,000$
Sample Input 1
4 1 2 2 4 3 2 3 5
Sample Output 1
1 0 0
题意:如果序列中有元素k则输出1,否则输出0。
思路:二分模板题。见代码。
疑惑:可能是这个题测试数据比较水,不排序也能过。
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int N; 5 long long a[100005]; 6 7 int find(long long x,int l,int r){ 8 int m=(r+l)>>1; 9 while(r>=l){ 10 if(x==a[m]) return 1; 11 else if(x<a[m]) r=m-1; 12 else l=m+1; 13 14 m=(r+l+1)>>1; 15 } 16 return 0; 17 } 18 19 int main(){ 20 int Q; 21 long long x; 22 23 cin>>N; 24 for(int i=0;i<N;i++) 25 cin>>a[i]; 26 sort(a,a+N); 27 cin>>Q; 28 while(Q--){ 29 cin>>x; 30 cout<<find(x,0,N-1)<<endl; 31 } 32 return 0; 33 }
原文地址:https://www.cnblogs.com/yzhhh/p/10048847.html
时间: 2024-10-29 21:54:17