#include <stdio.h>
#include <stdlib.h>
//no_search、常に-1返すだけ(演習0のやつ)
int no_search(int *a, int n, int x){
return -1; //探さないので-1のまま
}
//線形探索、前から順に見るだけ(昇順とか関係ない)
//O(n) → n個ならn回見る
int linear_search(int *a, int n, int x){
int ret = -1; //見つからなかった時用
for(int i = 0; i < n; i++){
if(a[i] == x){
ret = i; //見つかった場所
break; //最初の1個だけでOK
}
}
return ret;
}
//二分探索(前提条件として昇順じゃないといけない)
//lef, mid, rig を使う。範囲を半分にしていく。
//O(log n) → 半分ずつ減るので速い
int binary_search(int *a, int n, int x){
int lef = 0; //左端
int rig = n - 1; //右端
while(lef <= rig){ //範囲が逆転したら終わり(ここが超大事)
int mid = (lef + rig) / 2; //真ん中(小数点切り捨て)
if(a[mid] == x){
return mid; //見つかった
}
else if(x < a[mid]){ //真ん中より左なら
rig = mid - 1; //左側だけ残す
}
else{
lef = mid + 1; //右側だけ残す
}
}
return -1; //見つからなかった
}
int main(void){
int n, x;
scanf("%d %d", &n
, &x
); //n個の配列、探したいx
//mallocでn個分確保(int1個のサイズ×n)
int *a
= (int *)malloc(sizeof(int) * n
); //配列にn個入力
for(int i = 0; i < n; i++){
}
//二分探索(課題1のやつ)
int ans = binary_search(a, n, x);
if(ans != -1){
printf("a[%d] = %d\n", ans
, a
[ans
]); }else{
}
free(a
); //mallocしたらfree必須
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vbm9fc2VhcmNo44CB5bi444GrLTHov5TjgZnjgaDjgZHvvIjmvJTnv5Iw44Gu44KE44Gk77yJCmludCBub19zZWFyY2goaW50ICphLCBpbnQgbiwgaW50IHgpewoJcmV0dXJuIC0xOyAgIC8v5o6i44GV44Gq44GE44Gu44GnLTHjga7jgb7jgb4KfQoKLy/nt5rlvaLmjqLntKLjgIHliY3jgYvjgonpoIbjgavopovjgovjgaDjgZHvvIjmmIfpoIbjgajjgYvplqLkv4LjgarjgYTvvIkKLy9PKG4pIOKGkiBu5YCL44Gq44KJbuWbnuimi+OCiwppbnQgbGluZWFyX3NlYXJjaChpbnQgKmEsIGludCBuLCBpbnQgeCl7CglpbnQgcmV0ID0gLTE7ICAvL+imi+OBpOOBi+OCieOBquOBi+OBo+OBn+aZgueUqAoJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CgkJaWYoYVtpXSA9PSB4KXsKCQkJcmV0ID0gaTsgICAvL+imi+OBpOOBi+OBo+OBn+WgtOaJgAoJCQlicmVhazsgICAgIC8v5pyA5Yid44GuMeWAi+OBoOOBkeOBp09LCgkJfQoJfQoJcmV0dXJuIHJldDsKfQoKLy/kuozliIbmjqLntKLvvIjliY3mj5DmnaHku7bjgajjgZfjgabmmIfpoIbjgZjjgoPjgarjgYTjgajjgYTjgZHjgarjgYTvvIkKLy9sZWYsIG1pZCwgcmlnIOOCkuS9v+OBhuOAguevhOWbsuOCkuWNiuWIhuOBq+OBl+OBpuOBhOOBj+OAggovL08obG9nIG4pIOKGkiDljYrliIbjgZrjgaTmuJvjgovjga7jgafpgJ/jgYQKaW50IGJpbmFyeV9zZWFyY2goaW50ICphLCBpbnQgbiwgaW50IHgpewoJaW50IGxlZiA9IDA7ICAgICAgICAvL+W3puerrwoJaW50IHJpZyA9IG4gLSAxOyAgICAvL+WPs+errwoKCXdoaWxlKGxlZiA8PSByaWcpeyAgLy/nr4Tlm7LjgYzpgIbou6LjgZfjgZ/jgonntYLjgo/jgorvvIjjgZPjgZPjgYzotoXlpKfkuovvvIkKCQlpbnQgbWlkID0gKGxlZiArIHJpZykgLyAyOyAgLy/nnJ/jgpPkuK3vvIjlsI/mlbDngrnliIfjgormjajjgabvvIkKCglpZihhW21pZF0gPT0geCl7CgkJcmV0dXJuIG1pZDsgIC8v6KaL44Gk44GL44Gj44GfCgl9CgllbHNlIGlmKHggPCBhW21pZF0pewkvL+ecn+OCk+S4reOCiOOCiuW3puOBquOCiQoJCXJpZyA9IG1pZCAtIDE7ICAvL+W3puWBtOOBoOOBkeaui+OBmQoJfQoJZWxzZXsKCQlsZWYgPSBtaWQgKyAxOyAgLy/lj7PlgbTjgaDjgZHmrovjgZkKCQl9Cgl9CglyZXR1cm4gLTE7ICAvL+imi+OBpOOBi+OCieOBquOBi+OBo+OBnwp9CgppbnQgbWFpbih2b2lkKXsKCWludCBuLCB4OwoJc2NhbmYoIiVkICVkIiwgJm4sICZ4KTsgIC8vbuWAi+OBrumFjeWIl+OAgeaOouOBl+OBn+OBhHgKCgkvL21hbGxvY+OBp27lgIvliIbnorrkv53vvIhpbnQx5YCL44Gu44K144Kk44K6w5du77yJCglpbnQgKmEgPSAoaW50ICopbWFsbG9jKHNpemVvZihpbnQpICogbik7CgkvL+mFjeWIl+OBq27lgIvlhaXlipsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewoJCXNjYW5mKCIlZCIsICZhW2ldKTsKCX0KCgkvL+S6jOWIhuaOoue0ou+8iOiqsumhjDHjga7jgoTjgaTvvIkKCWludCBhbnMgPSBiaW5hcnlfc2VhcmNoKGEsIG4sIHgpOwoJaWYoYW5zICE9IC0xKXsKCQlwcmludGYoImFbJWRdID0gJWRcbiIsIGFucywgYVthbnNdKTsKCX1lbHNlewoJCXByaW50Zigibm90IGZvdW5kXG4iKTsKCX0KCWZyZWUoYSk7ICAvL21hbGxvY+OBl+OBn+OCiWZyZWXlv4XpoIgKCglyZXR1cm4gMDsKfQ==