일단 이 문제를 2분법으로 풀 수 있는 이유부터 말씀드릴게요.
f(x)를 A[i][j] <= x인 것의 갯수라고 합시다.
x<y라면 y = x+a (단 a>=1) 꼴로 나타낼 수 있습니다.
그러면 집합을 다음과 같이 둬 봅시다.
A = {(i,j)|A[i][j]<=x이고, 1<=i<=n and 1<=j<=n}
B = {(i,j)|x+1<=A[i][j]<=x+a이고, 1<=i<=n and 1<=j<=n}
C = {(i,j)|A[i][j]<=x+a이고, 1<=i<=n and 1<=j<=n}
여기서 A[i][j] = i*j이고 i*j는 정수 집합인 Z에 포함되고요. (심지어 자연수 집합 N에도 포함되죠)
그리고 잘 보시면 C이면서 A의 여집합은 B임을 알 수 있어요. 즉 n(A) + n(B) = n(C)인데 n(B)>=0이므로 n(A)<=n(C)입니다.
따라서 x가 증가할수록 f(x)가 단조 증가하기 때문에 이분 탐색 적용 가능합니다.
sotter1020 4년 전
일단 이 문제를 1차원으로 바꾸고 sorting하면
1, 2, 2, 3, 3, 4 ..
이렇게 되는데 2분법으로 문제를 푸신 분들이 어떻게 중복되는 숫자를 포함하여
count하는지 잘 모르겠고,
K를 넣은 이유에 대해서도 잘 모르겠습니다.
K는 몇 번째를 가르키는데 K를 right로 넣었을 때
값이 나오는 이유도 잘 모르겠습니다..
이분법 정말 어렵네요 ㅠㅠ