중간 뒤집기

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

요약
길이 50만 이하인 수열에서 연속된 한 구간을 뒤집어 얻을 수 있는 서로 다른 수열의 개수를 센다.
난이도

어려움10점 중 9점

유형
문자열 매칭, 해시맵, 배열, 조합론
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열 AA에서, 1≤i≤j≤N1\le i\le j\le N에 대하여 f(i,j)f(i,j)를 AA의 ii번째부터 jj번째 원소까지의 연속된 부분수열을 뒤집어서 얻어진 수열로 정의한다. 예를 들어, A=\[3,1,4,1,5]A=\[3,1,4,1,5]라면 f(2,3)=\[3,4,1,1,5]f(2,3) =\[3,4,1,1,5], f(1,5)=\[5,1,4,1,3]f(1,5) =\[5,1,4,1,3], f(1,1)=\[3,1,4,1,5]f(1,1) =\[3,1,4,1,5]이다.

f(i,j)f(i,j)에서 ii와 jj를 정하는 경우의 수는 N(N+1)2\displaystyle \frac{N(N+1)}{2}가지가 있다. 수열 AA가 주어질 때, 모든 f(i,j)f(i,j) 중 서로 다른 수열의 개수를 구하여라.

입력

첫째 줄에 수열 AA의 길이 NN이 주어진다. (1≤N≤500,0001\le N\le 500\\, 000)

둘째 줄에 AA의 원소를 의미하는 NN개의 정수 A_1,A_2,⋯ ,A_NA\_{1},A\_{2},\cdots ,A\_{N}이 공백으로 구분되어 주어진다. (1≤A_i≤1091\le A\_{i}\le 10^{9})

출력

f(i,j)f(i, j)로 가능한 서로 다른 수열의 개수를 출력한다.

예제2

  1. 예제 1

    입력
    4
    3 1 4 1
    
    예상 출력
    6
    
  2. 예제 2

    입력
    1
    20250726
    
    예상 출력
    1