#include <iostream>
#include <vector>
using namespace std;
// arr은 오름차순 정렬되어있고, 같은 값을 가진 원소가 없다고 가정
// n이 존재하지 않는 경우는 없다고 가정
int bs(vector<int> arr, int n) {
// 시간 복잡도 테스트용 카운터
int count = 0;
const int length = arr.size();
int delta = length / 4;
int index = length / 2;
while(arr[index] != n) {
count++;
if(arr[index] < n) {
index += delta;
if(delta < 1) {
index++;
}
} else {
index -= delta;
if(delta < 1) {
index--;
}
}
delta /= 2;
}
cout << "size: " << length << endl;
cout << "count: " << count << endl;
return index;
}
int main() {
vector<int> arr;
// 테스트 배열 초기화
for(int i=0;i<1000000;i++) {
arr.push_back(i + 1);
}
cout << "location is: " << bs(arr, 3) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgovLyBhcnLsnYAg7Jik66aE7LCo7IicIOygleugrOuQmOyWtOyeiOqzoCwg6rCZ7J2AIOqwkuydhCDqsIDsp4Qg7JuQ7IaM6rCAIOyXhuuLpOqzoCAg6rCA7KCVCi8vIG7snbQg7KG07J6s7ZWY7KeAIOyViuuKlCDqsr3smrDripQg7JeG64uk6rOgIOqwgOyglQppbnQgYnModmVjdG9yPGludD4gYXJyLCBpbnQgbikgewogICAgLy8g7Iuc6rCEIOuzteyeoeuPhCDthYzsiqTtirjsmqkg7Lm07Jq07YSwCiAgICBpbnQgY291bnQgPSAwOwogICAgY29uc3QgaW50IGxlbmd0aCA9IGFyci5zaXplKCk7CiAgICBpbnQgZGVsdGEgPSBsZW5ndGggLyA0OwogICAgaW50IGluZGV4ID0gbGVuZ3RoIC8gMjsKICAgIHdoaWxlKGFycltpbmRleF0gIT0gbikgewogICAgICAgIGNvdW50Kys7CiAgICAgICAgaWYoYXJyW2luZGV4XSA8IG4pIHsKICAgICAgICAgICAgaW5kZXggKz0gZGVsdGE7CiAgICAgICAgICAgIGlmKGRlbHRhIDwgMSkgewogICAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGluZGV4IC09IGRlbHRhOwogICAgICAgICAgICBpZihkZWx0YSA8IDEpIHsKICAgICAgICAgICAgICAgIGluZGV4LS07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVsdGEgLz0gMjsKICAgIH0KICAgIGNvdXQgPDwgInNpemU6ICIgPDwgbGVuZ3RoIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJjb3VudDogIiA8PCBjb3VudCA8PCBlbmRsOwogICAgcmV0dXJuIGluZGV4Owp9CgppbnQgbWFpbigpIHsKCXZlY3RvcjxpbnQ+IGFycjsKICAgIC8vIO2FjOyKpO2KuCDrsLDsl7Qg7LSI6riw7ZmUCiAgICBmb3IoaW50IGk9MDtpPDEwMDAwMDA7aSsrKSB7CiAgICAgICAgYXJyLnB1c2hfYmFjayhpICsgMSk7CiAgICB9CiAgICBjb3V0IDw8ICJsb2NhdGlvbiBpczogIiA8PCBicyhhcnIsIDMpIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==