아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Dirt Ratio

시간 제한2초메모리 제한512 MB

요약
연속한 부분 배열을 골라 (서로 다른 값의 개수)/(부분 배열 길이)를 최소로 만들고 그 값을 출력한다.
난이도

어려움10점 중 9점

유형
이분 탐색, 누적 합, 세그먼트 트리, 분할 정복
정답자
아직 제출이 없습니다

문제

어떤 대회에서 팀의 dirt ratio는 다음과 같이 계산된다. 먼저 팀이 맞히지 못한 문제는 모두 무시한다. 팀이 대회 중에 XX개의 문제를 맞혔고, 이 문제들에 대해 총 YY번의 제출을 했다고 하자. 그러면 dirt ratio는 XY\frac{X}{Y}로 정의된다. 팀의 dirt ratio가 너무 낮으면 페널티를 더 많이 받는 경향이 있어, 보통 순위에 불리하다.

Little Q는 코치이고, 지금 자기 학생 팀의 제출 목록을 보고 있다. 목록에는 문제 ID만 있고, 어떤 제출이 틀렸는지 어떤 제출이 맞았는지는 나오지 않는다. 하지만 그는 목록에 나오는 모든 문제를 팀이 대회 중에 결국 풀었다고 가정했다.

Little Q는 팀의 dirt ratio를 계산하고 몹시 화가 났다. 비율이 낮았기 때문이다. 그는 학생들과 이야기를 하려고 한다. 일을 더 심각해 보이게 하려고, 그는 목록의 연속한 부분 수열을 하나 고르려고 한다. 그러면 그 부분 수열에 적어도 한 번 나오는 문제와 제출만 고려하고, 이런 문제마다 마지막 제출은 맞았고 그 앞의 제출은 모두 틀렸다고 가정한다. 그런 다음 Little Q는 고른 연속한 부분 수열만 가지고 dirt ratio를 계산한다.

여러분은 가장 낮은 dirt ratio를 주는 부분 수열을 찾는 프로그램을 작성해야 한다.

입력

첫째 줄에 제출 목록의 길이 nn이 주어진다 (1≤n≤6⋅1041 \leq n \leq 6 \cdot 10^4).

둘째 줄에 nn개의 양의 정수 a_1a\_1, a_2a\_2, …\ldots, a_na\_n이 주어진다. 이는 각 제출의 문제 ID이다 (1≤a_i≤n1 \leq a\_i \leq n).

출력

가능한 가장 낮은 dirt ratio를 한 줄에 하나의 실수로 출력한다.

답의 절대 오차는 10−410^{-4} 이하여야 한다.

예제1

  1. 예제 1

    입력
    5
    1 2 1 2 3
    
    예상 출력
    0.5000000000