Programming/Algorithm
[Algorithm] C++ 이분검색
100winone
2019. 12. 23. 12:18
입력설명
첫 줄에 한 줄에 자연수 N(3<=N<=1,000,000)과 M이 주어집니다. 두 번째 줄에 N개의 수가 공백을 사이에 두고 주어집니다.
출력설명
첫 줄에 정렬 후 M의 값의 위치 번호를 출력한다
입력예제
8 32
23 87 65 12 57 32 99 81
출력예제
3
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
int n, i, key, lt = 0, rt, mid, tmp;
scanf("%d %d", &n, &key);
vector<int> a;
for (i = 0; i < n; i++) {
scanf("%d", &tmp);
a.push_back(tmp);
}
sort(a.begin(), a.end());
rt = n - 1;
while (lt <= rt) {
mid = (lt + rt) / 2;
if (a[mid] == key) {
printf("%d\n", mid + 1);
return 0;
}
else if (a[mid] > key) {
rt = mid - 1;
}
else {
lt = mid + 1;
}
}
return 0;
}