질문을 올릴 때 위에 읽으라고 나오는 공지사항을 읽으셨나요? 그 글에 굵은 글씨로 적힌 문장을 다시 읽어보시기 바랍니다.
11004번 - K번째 수
더 빠르게 하는 방법
: new랑 delete를 안 쓰면 됩니다.
사실 그냥 L과 R을 전역변수처럼 써 버리면 더 빨라지겠죠. 할당할 필요도 없으니까.
sort 함수를 쓴 경우, 1.5초 정도에 아슬아슬하게 통과했다는 것만 참고하심 됩니다.
그리고
(1) 할당
(2) 복사
(3) merge
(4) 제거
에서 사실상 (1), (4)는 필요가 없죠.
O(nlogn)짜리인데, 아슬아슬하게 통과하는 경우
상수를 낮추는 것도 중요해요.
빠른 입력은 이 문제를 풀어보세요.
그에 대한 건 https://www.acmicpc.net/blog/v... 에 있습니다.
물론, scanf, printf만 쓰고, nth_element 없이 푸는 방법이 있습니다. 만. 비추천합니다.
더 정확히 말해서, 최악의 경우에 O(2n)짜리도, scanf와 printf만 이용해서 1168ms에 통과했습니다. fast_io는 136ms
상당히 빡빡하니까.
scanf, printf를 쓰실 경우, 다른 방법을 찾아보세요. 그 방법은 제가 알려드릴 수도 있지만.
스스로 찾아서 공부해 보시는 것도 나쁘지 않을 거 같습니다.
radix sort, intro sort, quick select, intro select, heap 등을 찾아보시면 좋을 거 같습니다.
제가 푼 방법은 1번째고요. 아니면 c++에서 nth_element도 찾아보면 유용한 자료 꽤 있어요..
댓글을 작성하려면 로그인해야 합니다.
minu0122 5년 전 1
c++로 구현했는데 scanf 하고 printf 가 cin 이나 cout 보다 빠르다고 해서 c 라이브러리 추가해서 사용했습니다. 또한 정렬할때 quicksort로 했는데 시간초과가 뜨길래 quicksort의 최악의 경우를 넣은건가 싶어서 mergesort로 바꾸었는데 아직도 시간초과가 뜹니다. 혹시 조언좀 구할 수 있을까요?