トピック出典:https://www.51nod.com/Challenge/Problem.html#problemId=2063
タイトル説明
整数nと、整数を入力します。nは、nは昇順にソートされた整数保証。
次にQクエリの整数q(Q <= 100000)代表に入ります。次Qの行は、各列は、クエリの代表的な整数mを、含んでいます。各クエリに対して、バイナリ検索を使用して、M nは整数で、前の入力に現れたか否かが判断されます。存在する場合、出力ライン「はい」、そうでない場合は「いいえ」。
エントリー
最初のライン:整数N(N <= 100000)。 次のn行は、各行の整数(1 <= <=愛愛 ^ 9 10)。 次の行、整数q。 次Q線それぞれは、整数Xを入力(1 <= X <= 10 ^ 9)。
輸出
Q行の文字列、各行動「はい」または「いいえ」。
サンプル入力
5 1 3 4 5 7 3 4 5 0
サンプル出力
はい はい ません
// 方法一:手写bynary_seach
の#include <ビット/ STDC ++ H> 名前空間STDを使用して、 const int型max_n = 1E5 + 10。 整数nは、[max_n]、Q、X。 メイン()がINT { CINを>> N。 以下のために(INT I 0 =、I <N; I ++) CIN >> [I]。 cinを>> Q; 用(INT I = 0; I <Q、I ++){ CIN >> X。 INT低= 0、ハイ= N-1; ブールF = 0。 一方(低<=高){ int型ミッド=ハイ(高-低)/ 2。 IF([中間]> X)高=ミッド1。 IF([中間] <X)=低、中間+ 1。 IF([中間] == x)は{ F = 1。 ブレーク; } } COUT <<(F "はい" "いいえ"?)<< ENDL。 } 0を返します。
// 方法二:使用STL之bynary_seach()
の#include <ビット/ STDC ++ H>
名前空間STDを使用して、
const int型max_n = 1E5 + 10。
整数nは、[max_n]、Q、X。
メイン()がINT
{
CINを>> N。
以下のために(INT I 0 =、I <N; I ++)
CIN >> [I]。
cinを>> Q;
用(INT I = 0; I <Q、I ++){
CIN >> X。
INT F = binary_search(+ nを、X)。
coutの<<(?F "はい": "いいえ")<<てendl;
}
0を返します。
}
STLバイナリ検索:
https://blog.csdn.net/zwj1452267376/article/details/47150521
バイナリbinary_searchで検索、LOWER_BOUND、UPPER_BOUND(手書き詳細):
https://blog.csdn.net/dl970220/article/details/80415798