#define MAXN 10000 int A[MAXN]; int N; void BinarySearch(int x) { int p, q, i, L; p = 0; /* Left border of the search */ q = N-1; /* Right border of the search */ L = 0; /* Comparison counter */ while (p <= q) { i = (p + q) / 2; ++L; if (A[i] == x) { printf("Found item i = %d in L = %d comparisons\n", i, L); return; } if (x < A[i]) q = i - 1; else p = i + 1; } }위의 프로그램에서 함수 BinarySearch를 호출하기 전에 1에서 10000 사이의 어떤 정수 N과 감소하지 않는 정수 순열로 채워진 행렬 A가 설정된다. 위의 함수는 값 i 와 L 을 찾은 후 "Found item i = XXX in L = XXX comparisons"라는 메시지를 출력하며 종료된다.
당신이 할 일은 주어진 i 와 L 이 나오는 것이 가능한 N 값을 모두 찾는 것이다. 하지만 가능한 N 값의 개수가 너무 많을 수 있기 때문에 가능한 N 값들을 연속한 구간들로 나누어서 각각의 구간들에 대해 첫 수와 끝 수를 출력한다.
입력 10 3 출력 4 12 12 17 18 29 30 87 94
번역: KangJ 출처: 2000-2001 ACM Northeastern European Regional Programming Contest Problem E