예제를 가지고 보면
1 5 2 6 3 7 4 를 쪼개서
대충 생각난 거론
1층: 1 2 3 4 5 6 7
2층: 1 2 5 3/ 4 6 7
3층: 1 5/2 3/ 6/4 7
4층: 1/5/2/6/3/7/4
이렇게 쪼개시고 하시면 됩니다.... 2 5 3을 예로 들면
(2,5)=(2,2)+(3,4)+(5,5)이니 임의의 수 i에 대해
1.각 부분에서 i이하의 수의 개수 세기(각 구간은 정렬되 있으므로 이진탐색)
2. i가 각 부분에 나오는지(이진탐색하면서 알 수 있음)
를 log(n)2만에 알 수 있으므로, O(Q*log(n)2+n*log(n))만에 해결될 것으로? 보입니당
gkfkagkfka12 5년 전
고수분들...제발 살려주십쇼 6시간을 넘게 한 문제만 붙들고 있네요...
질문들도 다 보고 구글링도 계속했는데 세그먼트 트리로 풀려면 제 풀이는 다음과 같습니다.
1. 배열을 정렬기준으로 세그먼트 트리를 만든다.
2. 임의의 X를 기준으로 X보다 작은 숫자의 개수가 K보다 작거나 같음/더 큼 기준으로 이진탐색을 하면 마지막 X가 답이 된다.
근데 여기서 2번을 어떻게 구현해야 하는지 모르겠습니다. 임의의 X를 어떤 것으로 잡아야 할지랑 이진탐색을 세그먼트 트리 위에서부터 재귀적으로 아래로 내려오면서 하는지를 잘 모르겠습니다. 도움주시면 감사하겠습니다.
코드는 2번이 구현되지 않은 상태입니다.