-
2517알고리즘/acmicpc 2015. 2. 26. 21:54
처음에 바로 BIT로 풀어야지 했다가
정수의 범위가 1000000000까지인걸 단순히 BIT로 접근해선 안되겠음을 깨달았다.
이전까지 탐색한 정보들을 Heap에 넣어둘까 하다가 최악의 경우가 O(n*n)이라 별 소용이 없음을 생각하고 다른 방법을 강구...
그러다가 어차피 선수의 수가 500000이하니까 1~1000000000을 1~500000로 좁히는 방법을 생각했다.
방법은 1~1000000000의 data들을 정렬해서 그 data의 index값을 BIT에 쓰는 방법이다.
해당 index 값을 찾는 과정은 이진 탐색이니까 O(log(500000))으로 확 준다.
그러면 BIT에 index값까지의 합을 확인하고 현재까지 탐색한 선수의 수를 빼주고
그 index에 1만큼 update한다. 이 과정은 O(logN)
시간복잡도를 O(NlogN)으로 줄일 수 있었다.