시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 163 | 55 | 47 | 45.192% |
올해부터 ACM-ICPC 월드 파이널에서 파이썬을 사용할 수 있다. 그 기념으로 파이썬에 대한 재미있는 사실 하나를 소개하고자 한다.
파이썬은 팀소트라는 정렬 알고리즘을 사용한다. 요약하면 대부분의 원소들이 순서대로 있는 부분배열로 나누고, 각 부분배열을 삽입정렬하고, 정렬된 부분배열들을 합치는 것이다. 그래서 연속된 원소들이 뭉쳐져 있을수록 정렬이 빨라진다.
그 중에서 부분배열로 나누는 과정에 주목하려고 한다.
$MINRUN$이 작을수록 합쳐야 될 부분배열이 많아지고, $MINRUN$이 클수록 나쁜 원소가 많아져 삽입정렬이 힘들어지므로 적당한 $MINRUN$을 잡는 것이 중요하다. 배열을 합치는 과정 때문에 $N/MINRUN$이 2의 지수에 가까워야 좋다는 조건도 있지만, 이는 이 문제에서 고려하지 않을 것이다. $MINRUN$의 값이 주어졌을 때 부분배열과 나쁜 원소의 개수를 구해 보자.
첫 번째 줄에 배열의 길이 $N$이 주어진다.($5 \leq N \leq 100,000$) 두 번째 줄에 배열의 원소 $N$개가 주어진다. 각 원소의 절댓값은 $10^9$ 이하이다. 세 번째 줄에 쿼리의 개수 $Q$가 주어진다.($1 \leq Q \leq 100,000$) 네 번째 줄부터 $Q+3$번째 줄까지는 한 줄에 하나씩 $MINRUN$의 값이 주어진다.($2 \leq MINRUN \leq N$)
각 쿼리마다 부분배열의 개수와 나쁜 원소의 개수를 한 줄에 출력한다.
15 2 4 4 3 -1 -2 -2 5 6 5 4 3 2 3 4 3 3 4 5
5 0 4 3 3 5
University > KAIST > 2017 KAIST 7th ACM-ICPC Mock Competition F번
Contest > Open Cup > 2018/2019 Season > Stage 5: Grand Prix of Korea L번