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

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

NumberEater

시간 제한1초메모리 제한128 MB

요약
주어진 수열에서 연속한 부분 배열이 만들 수 있는 서로 다른 값의 집합의 개수를 센다.
난이도

보통10점 중 6점

유형
해시맵, 배열, 투 포인터
정답자
아직 제출이 없습니다

문제

NumberEater는 바이트랜드에서 유명한 괴물이다. 이 괴물은 숫자를 먹지만 입맛이 매우 까다로워서, 매일 먹는 식사가 서로 달라야 한다. 괴물에게는 정수 수열 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 괴물은 시작 위치 ii와 끝 위치 jj (1≤i≤j≤n1 \le i \le j \le n)를 골라, 원소 ai,ai+1,…,aja_i, a_{i+1}, \ldots, a_j로 이루어진 식사를 준비한다.

괴물은 두 식사 [i1,j1][i_1, j_1]과 [i2,j2][i_2, j_2]가 담고 있는 숫자의 집합이 서로 같으면, 두 식사를 같은 것으로 여긴다. 즉,

{ak:i1≤k≤j1}={ak:i2≤k≤j2}\{a_k : i_1 \le k \le j_1\} = \{a_k : i_2 \le k \le j_2\}

수열 aa를 이용해 NumberEater가 준비할 수 있는 서로 다른 식사의 개수를 세어 주자.

입력

첫째 줄에 수열 aa의 길이인 정수 nn (1≤n≤5001 \le n \le 500)이 주어진다. 이어지는 nn개의 줄에는 수열의 원소가 한 줄에 하나씩 주어진다. 각 원소는 11 이상 500500 이하이다.

출력

NumberEater가 준비할 수 있는 서로 다른 식사의 개수를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    6
    1
    2
    3
    1
    2
    3
    
    예상 출력
    7